题目描述
任意输入一个整数,判断它是否为素数。是的话输出 T,不是的话输出 F。
质数(prime number)又称素数,质数定义为在大于 1 的自然数中,除了 1 和它本身以外不再有其他因数。
输入
输入只有一行,包括 1 个整数。( 1≤n≤10^9)
输出
输出只有一行。
样例
输入
57
输出
F
输入
7
输出
T
解题思路1
1)先明确输入输出有几个,这里输入只有1个,是int类型,输出只有一个,是string类型或者char类型都可以
2)分析题意,这里是判断输入的数n是否为素数,需要先知道什么是素数,如果1个数只有1和它本身两个因数那么这个数就是素数,否则就不是
3)我们知道一个数的因数范围是1到它本身,所以只需要判断除了1和它本身以外,如果还有第3个因数那么这个数肯定就不是素数,如果一直都没有找到第3个因数,那么就判断这个数是素数
4)进一步分析,拿到1~n这n个数可以利用for循环实现,可以用一个cnt变量计数,如果循环还没有结束,cnt就已经大于等于3,那就表明不是素数,可以提前结束循环,如果循环正常结束,cnt的值为2,那就表示这个数是素数
注:
a. 这里需要注意最小的素数是2,所以小于等于1的数都不是素数,需要特判一下,可以把cnt改为1
b. 这里要考虑时间复杂度,我们可以发现因数都是成对出现的,所以循环范围可以不到n,到sqrt(n)就可以,每次加2
代码实现
#include <bits/stdc++.h>
using namespace std;
int main(){
int n,cnt=0;
cin>>n;
for(int i = 1; i <= sqrt(n); i++){
if(n%i == 0){
cnt = cnt + 2;
if(cnt >= 3){
break;
}
}
}
if(n <= 1){
cnt = 1;
}
if(cnt >= 3 || cnt <= 1){
cout<<"F"<<endl;
}else{
cout<<"T"<<endl;
}
return 0;
}
解题思路2
1)先明确输入输出有几个,这里输入只有1个,是int类型,输出只有一个,是string类型或者char类型都可以
2)分析题意,这里是判断输入的数n是否为素数,需要先知道什么是素数,如果1个数只有1和它本身两个因数那么这个数就是素数,否则就不是
3)我们先假设这个数是,就创建一个bool类型的变量f,赋初值true表示先假设这个数n是素数,然后在2~n-1之间找第3个因数,如果找到了,那么就修改f的值为false,直接跳出循环,循环结束去判断f的值,如果是true那么就输出T,否则输出F
代码实现
#include <bits/stdc++.h>
using namespace std;
int main(){
int n,i;
bool f = true;
cin>>n;
for(i=2;i<=sqrt(n);i++){
if(n%i == 0){
f = false;
break;
}
}
if(f==true && n>1){
cout<<"T"<<endl;
}else{
cout<<"F"<<endl;
}
}
标签:输出,cnt,判断,1023,int,因数,素数,输入
From: https://blog.csdn.net/qq_41611106/article/details/142534067