1007 素数对猜想 (20 分)
让我们定义dn为:dn=pn+1 − pn,其中pi是第i个素数。显然有d1=1,且对于n>1有dn是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N(<10^5),请计算不超过N的满足猜想的素数对的个数。
输入格式:
输入在一行给出正整数N。
输出格式:
在一行中输出不超过N的满足猜想的素数对的个数。
输入样例:
20
输出样例:
4
思路:
is_prime函数用来判断n是否是素数。在main函数中遍历从3到N的奇数i,判断i和i+2是否全为奇数,若是则count++。
参考代码:
#include <cstdio>
#include <cmath>//sqrt的头文件;
bool is_prime(int n){//判断n是否为素数的函数!
if (n<=1) return false;
int sqr =(int) sqrt(1.0*n);//使用sqrt函数常常伴随强制类型转化,因为sqrt只支持double和float类型
for (int i=2;i<=sqr;i++){
if (n%i==0) return false;
}
return true;
}
int main(){
int n,count=0;
scanf("%d",&n);
for (int i=3;i+2<=n;i+=2){//每次加2,因为素数一定是奇数。
if(is_prime(i)==true&&is_prime(i+2)==true){//i和i+2都是素数时才count+1
count++;
}
}
printf("%d",count);
return 0;
}
点评:
①此题属于数学问题型,关键在于正确写出判断素数的最优函数。