让我们定义dn为:,其中是第个素数。显然有,且对于有是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数,请计算不超过N
的满足猜想的素数对的个数。
输入格式:
输入在一行给出正整数N
。
输出格式:
在一行中输出不超过N
的满足猜想的素数对的个数。
输入样例:
20
输出样例:
4
代码
#include<iostream>
#include<cstring>
using namespace std;
#define MAXN 100010
int prime[MAXN];
bool is_prime[MAXN];
int n=0;
void Prime(){
int i,j;
memset(is_prime,1,sizeof(is_prime));
is_prime[0]=is_prime[1]=0;
for(i=2;i<=MAXN;i++){
if(is_prime[i]){
prime[++n]=i;
for(j=i+i;j<=MAXN;j+=i)
is_prime[j]=0;
}
}
}
int ans[MAXN];
void Ans(){
int i,j;
ans[0]=ans[1]=ans[2]=0;
for(i=3,j=2;i<MAXN;i++){
if(i==prime[j]){
if(prime[j]-prime[j-1]==2)
ans[i]=ans[i-1]+1;
else ans[i]=ans[i-1];
j++;
}
else ans[i]=ans[i-1];
}
}
int main(){
Prime();
Ans();
int N;
while(cin>>N){
cout<<ans[N]<<endl;
}
return 0;
}