题目描述:
让我们定义dn为:dn=pn+1−pn,其中pi是第i个素数。显然有d1=1,且对于n>1有dn是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N
(<105),请计算不超过N
的满足猜想的素数对的个数。
输入格式:
输入在一行给出正整数N
。
输出格式:
在一行中输出不超过N
的满足猜想的素数对的个数。
输入样例:
20
输出样例:
4
分析:
由题目中素数对的定义可知,小于3的数不含有素数对,故仅当输入数字大于3时才对其进行判断。
进行素数对判断以前,分别定义两个变量存储前一个素数和当前素数来进行判断。
PS:判断一个数是否为素数时,无需对所有小于它的整数取余,到其平方根即可。
代码:
#include <stdio.h>
#include <math.h>
int main()
{
int num;
scanf("%d",&num);
int allsushudui=0;
int prenum=3;
int thisnum,i,temp;
if(num>=3){ //如果输入的数大于3
for(i=3;i<=num;i++){ //从3开始循环遍历在输入数的范围内是否为素数
temp=sqrt(i); //另temp等于当前数的平方根
int j;
int k=1;
for(j=2;j<=temp;j++){
if(i%j==0){
k=0;
break;
}
}
if(k==1){
thisnum=i;
if((thisnum-prenum)==2){
allsushudui++;
}
prenum=thisnum;
}
}
}
printf("%d",allsushudui);
return 0;
}