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 }
原文地址:https://www.cnblogs.com/Deribs4/p/4716711.html