(最优解)L1-028 判断素数 (10分)——17行代码AC
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                (最优解)L1-028 判断素数 (10分)——17行代码AC
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                立志用更少的代碼做更高效的表達
本題的目標很簡單,就是判斷一個給定的正整數是否素數。
輸入格式:
 輸入在第一行給出一個正整數N(≤ 10),隨后N行,每行給出一個小于2
 ?31
 ?? 的需要判斷的正整數。
輸出格式:
 對每個需要判斷的正整數,如果它是素數,則在一行中輸出Yes,否則輸出No。
輸入樣例:
 2
 11
 111
輸出樣例:
 Yes
 No
解法一:簡單的素數判斷
解法一代碼
#include<iostream> #include<cmath> using namespace std; int main() {ios::sync_with_stdio(false);int T; cin>>T; while(T--) {int n; cin>>n;if(n==1) cout << "No" << '\n';else {bool flag = false;for(int i = 2; i <= sqrt(n); i++)if(n % i == 0) { cout << "No" << '\n'; flag=true; break;}if(flag == false) cout << "Yes" << '\n';}} return 0; }解法二:可以采用數論知識中的快速求素數方法。 詳細見代碼。
解法二代碼
#include<bits/stdc++.h> //萬能頭文件 using namespace std; bool IsPrime(int n) {if(n <= 3) //1、特判1 2 3if(n==1) return false; else return true;//不在6倍數的兩側一定不是 if(n%6 != 1 && n%6 != 5) return false; //2、特判6n-1 和 6n+1 int temp = sqrt(n);//在6倍數的兩側也可能不是。 for(int i = 5; i<=temp; i+=6) //3、5為首相,6位公差遞增循環 if(n%i==0||n%(i+2)==0) return false;return true; } int main() {int T; cin>>T; while(T--) {int n; cin>>n;cout << (IsPrime(n)?"Yes":"No") << '\n';} return 0; }每日一句
人吶,可以輸一百次,但是一定要贏最后一次。
總結
以上是生活随笔為你收集整理的(最优解)L1-028 判断素数 (10分)——17行代码AC的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 32行代码AC——L1-027 出租 (
- 下一篇: 5行代码AC——L1-029 是不是太胖
