问题引入:
输入一个正整数n,判断n是否是素数,若n是素数,输出”Yes”,否则输出”No”。 注意:1不是素数。
输入:
输入一个正整数n(n<=1000)
输出:
如果n是素数输出"Yes",否则输出"No"。输出占一行。
思路:
判断一个数n是否为素数,看它是否只有除1和本身之外的因数。因此我们可以用for循环遍历,从3(大于2的且可以被2整除的肯定不是素数)到n-1。n作被除数,i作除数,如果在这之间存在n的除数,说明n不是素数。至于1到3的数字,我们要分开讨论。
代码实现:
#include <iostream>
using namespace std;
bool isPrime(int n){
if(n==1) return false;
else if(n<=3) return true;
else if(n%2==0) return false;
else {
for(int i = 3;i < n;i ++){
if(n%i==0) return false; //如果能被3~n-1之间的数字整除,说明不是素数
}
}
return true;
}
int main(){
int n; cin >> n;
bool ans = isPrime(n);
if(ans) cout << "Yes";
else cout << "No";
return 0;
}
以上代码中的for循环还可以用另一种方法表示,让数组的下标从3到n的平方根,也就是(int)sqrt(n)。这样可以减少循环的次数,提高效率。如下所示:
#include <iostream>
#include <cmath>
using namespace std;
int main(){
int n; cin >> n;
bool ans=true;
if(n == 1) ans = false;
else if(n==2||n==3) ans = true;
else if(n%2==0) ans = false;
else {
/* TODO (#1#): 当n>3时,判断从3到n-1之间是否有其因数*/
for(int i = 3;i <= (int)sqrt(n);i ++){
if(n%i==0) ans = false;
}
}
if(ans) cout << "Yes";
else cout << "No";
return 0;
}