B1007. 素数对猜想 (20)

让我们定义 dn 为:dn = pn+1 - pn,其中 pi 是第i个素数。显然有 d1=1 且对于n>1有 dn 是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。

现给定任意正整数N (< 105),请计算不超过N的满足猜想的素数对的个数。

输入格式:每个测试输入包含1个测试用例,给出正整数N。

输出格式:每个测试用例的输出占一行,不超过N的满足猜想的素数对的个数。

输入样例:

20

输出样例:

4

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <iostream>
 4 #include <string.h>
 5 #include <string>
 6 #include <math.h>
 7 #include <algorithm>
 8 using namespace std;
 9 
10 bool isPrime(int n)
11 {
12     if(n<=1)return false;
13     int sqr=sqrt(1.0*n);
14     for(int i=2;i<=sqr;i++)
15     {
16         if(n%i==0)return false;
17     }
18     return true;
19 } 
20 //素数表 
21 const int maxn=100000;
22 int prime[maxn]={0},num=0;
23 bool p[maxn]={0};
24 void Find_Prime(int n)
25 {
26     for(int i=2;i<maxn;i++)
27     {
28         if(p[i]==false)
29         {
30             prime[num++]=i;
31             if(num>n)break;
32             for(int j=i+i;j<maxn;j+=i)
33             {
34                 p[j]=true;
35             }
36         }
37     }
38 } 
39 
40 int main(){
41     
42     int n,count=0;
43     scanf("%d",&n);
44     Find_Prime(n+1);
45     for(int i=3;i+2<=n;i+=2)
46     {
47         if(p[i]==false&&p[i+2]==false)
48         count++;
49     }
50     printf("%d",count);
51     return 0;
52 }

 

posted @ 2015-02-28 15:03  Joilee  阅读(122)  评论(0编辑  收藏  举报