pat00-自测2. 素数对猜想 (20)
00-自测2. 素数对猜想 (20)
时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue
让我们定义 dn 为:dn = pn+1 - pn,其中 pi 是第i个素数。显然有 d1=1 且对于n>1有 dn 是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N (< 105),请计算不超过N的满足猜想的素数对的个数。
输入格式:每个测试输入包含1个测试用例,给出正整数N。
输出格式:每个测试用例的输出占一行,不超过N的满足猜想的素数对的个数。
输入样例:20输出样例:
4
1 #include <cstdio> 2 #include <cstring> 3 #include <string> 4 #include <queue> 5 #include <cmath> 6 #include <iostream> 7 using namespace std; 8 bool isprime[100005]; 9 int prime[10000],primenum=0; 10 void getprime(int n){ 11 memset(isprime,true,sizeof(isprime)); 12 isprime[0]=isprime[1]=false; 13 //cout<<primenum<<endl; 14 int i,j; 15 for(i=2;i<=n;i++){ 16 //cout<<i<<endl; 17 if(isprime[i]){ 18 //cout<<i<<endl; 19 for(j=i+i;j<=n;j+=i){ 20 //cout<<i<<" "<<j<<endl; 21 isprime[j]=false; 22 } 23 } 24 } 25 //cout<<primenum<<endl; 26 for(i=2;i<=n;i++){ 27 if(isprime[i]){ 28 prime[primenum++]=i; 29 //cout<<prime[primenum-1]<<endl; 30 } 31 } 32 //cout<<primenum<<endl; 33 } 34 int main(){ 35 int n,num=0,i; 36 getprime(100005); 37 scanf("%d",&n); 38 for(i=0;i<primenum-1&&prime[i+1]<=n;i++){ 39 if(prime[i+1]-prime[i]==2){ 40 //cout<<prime[i]<<endl; 41 num++; 42 } 43 } 44 cout<<num<<endl; 45 return 0; 46 }