让我们定义dn为:dn=pn+1−pn,其中pi是第i个素数。显然有d1=1,且对于n>1有dn是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N
(<105),请计算不超过N
的满足猜想的素数对的个数。
输入格式:
输入在一行给出正整数N
。
输出格式:
在一行中输出不超过N
的满足猜想的素数对的个数。
输入样例:
20
输出样例:
4
思路:首先用筛法求素数,将数组中的素数都为0(通常都是为1,为0比较方便,省一层循环,自己记住就行),然后根据给的数字来找间隔为2的素数
#include<iostream>
#include<cstdio>
#include<cstring>
int main(){
int a[100005];
int i,j,n,con;
memset(a,0,sizeof(a));
a[1]=a[2]=0;
for(i=2;i<100005;i++){
if(a[i]==0){
for(j=2;j*i<100005;j++){
a[i*j]=1;//已知素数的倍数肯定不是素数
}
}
}
con=0;
scanf("%d",&n);
// printf("n=%d\n",n);
for(i=n;i>=1;i--){
if(a[i]==0){
j=i-1;
while(a[j]!=0 &&j >=1 ) j--;
// printf("i=%d j=%d\n",i,j);
if(i-j==2) con++;
}
}
printf("%d\n",con);
return 0;
}