2.再进一步思考,如果
n
n
n能被一个大于
n
\sqrt{n}
n的数整除, 我们不妨设这个大于
n
\sqrt{n}
n的数为
t
t
t,则
n
n
n也一定能被
n
/
t
n/t
n/t整除,而
n
/
t
n/t
n/t是小于
n
\sqrt{n}
n的,所以只需验证输入的数字
n
n
n能否被
2
2
2 到
n
\sqrt{n}
n之间的任何数整除。 举个例子: 例如
n
=
21
n=21
n=21,
21
21
21能被一个大于
21
\sqrt{21}
21的
7
7
7即
49
\sqrt{49}
49整除(
21
÷
7
=
3
21÷7=3
21÷7=3),则反过来
21
21
21也能被小于
21
\sqrt{21}
21的3即
9
\sqrt{9}
9整除。 因此我们只需要验证输入的数字
21
21
21能否被
2
2
2到$\sqrt{21} $之间的任何数整除即可。
#include <iostream>
using namespace std;
bool isPrime(int x){
for(int i=2; i*i<=x; i++){
if (x % i == 0)
return false;
}
return true;
}
int main() {
int num;
cin >> num;
if (isPrime(num)){
cout << "是质数" <<endl;
}
else
cout << "不是质数" <<endl;
return 0;
}
#include<iostream>usingnamespace std;intmain(){int num;
cin >> num;bool flag =true;// 必须先初始化flag。若直接bool flag;会报错。for(int i=2; i*i<=num; i++){//遍历到根号num就可以了if(num % i ==0){//可以整除,说明num不是质数
flag =false;break;}}if(flag)
cout <<"是质数"<<endl;else
cout <<"不是质数"<<endl;return0;}