c++题解:判断素数
·
题目:输入一个整数n,判断是不是素数,并输出判断结果。
数学原理:素数是只有1和它本身两个因数的数。对于素数,我们需要知道3点。
第一,1不是素数。
第二,2是素数。
第三,除2以外的偶数都不是素数。
那么,对于一个不是1和2也不是偶数的数,我们就需要判断n能否整除3到根号n任意一个数。若能整除,则不是素数,若不能,则是素数。
另:为什么只判断到根号n呢?因为把一个数分解成两个数相乘,这两个数与根号n只有2种情况。
1.这两个数都等于根号n
2.一个数大于根号n,另一个数小于根号n
所以,我们需要分类讨论n的情况。
1.n<=1,不是素数
2.n=2,是素数
3.n是除2以外的偶数,不是素数
4.n是除1以外的奇数,n能整除3到根号n的任意数,不是素数。不能则是素数。
具体可以用这样两张图表示。

代码实现:bool函数,for循环
#include<bits/stdc++.h>
using namespace std;
bool isPrime(int n)
{
if(n <=1) return false;
else if(n == 2) return true;
else if(n %2 ==0) return false;
else for(int i=3;i <= sqrt(n);i+=2)
{
if(n % i==0) return false;
}
return true;
}
int main()
{
int n;
cin >>n ;
if(isPrime(n)) cout << "yes" << endl;
else cout << "no" << endl;
return 0;
}
题型2:完美素数
在素数的基础上再加一个条件,这个素数各个位上的数字之和也是素数。
可以用嵌套函数。
#include<iostream>
#include<cmath>
using namespace std;
bool isprime(int n)
{
if(n <=1) return false;
if(n == 2) return true;
if(n % 2 == 0) return false;
for(int i = 3;i <= sqrt(n);i += 2)
{
if(n % i == 0) return false;
}
return true;
}
int isper(int n)
{
int sum =0;
while(n!=0)
{
sum += n % 10;
n /= 10;
}
return sum;
}
int main()
{
int n;
while(cin >> n)
{
if(isprime(n)&&isprime(isper(n)))
{
cout << "YES" << endl;
}
else cout << "NO" << endl;
}
return 0;
}
更多推荐



所有评论(0)