1007 素数对猜想

1007 素数对猜想 (20分)
 

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

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

输入格式:

输入在一行给出正整数N

输出格式:

在一行中输出不超过N的满足猜想的素数对的个数。

输入样例:

20

输出样例:

4

    这道题还是颇费了点儿功夫的,始用暴力查找,但是很明显这是行不通的的,因为会超时。但是我又不会其他方法了,于是去网上看了看。找到了一个埃拉托斯特尼筛子法,

它的基本思路是,删掉所有的合数,剩下的一定就是素数。于是这道题我们就用这个方法来寻找所有的素数,而且效率也很高。 看代码,代码注释的比较详细

 1 #include<iostream>
 2 #include<vector>
 3 using namespace std;
 4 int main() 
 5 {//寻找素数用埃拉托斯特尼筛子法,基本思路:不是挑选出所有素数,而是筛掉所有的合数
 6     int n;
 7     cin>>n;
 8     vector<int> v(n,0);
 9     int k=0;
10     for(int i=2;i<=n/2;i++) //只需要一半就行,剔除v中的合数,剩下的即为素数
11     {
12         k=i;
13         if(v[k] == 0) 
14         {
15             while (k<n) 
16             {
17                 k += i;
18                 if(k<n) 
19                     v[k]=1;  //标记为1代表不是素数
20             }
21         }
22     }
23     vector<int> v1;
24     for(int i=2;i<n;i++) 
25     {
26         if (v[i] == 0)
27             v1.push_back(i);
28     }
29     int count=0;
30     for(unsigned int i=1;i<v1.size();i++)
31     {
32         if(v1[i]-v1[i-1]==2)
33             count++;
34     }
35     cout<<count;
36     return 0;
37 }

有一个测试点没通过,找不出哪里有问题

原文地址:https://www.cnblogs.com/buanxu/p/12812606.html