码迷,mamicode.com
首页 > 其他好文 > 详细

1007 素数对猜想

时间:2020-05-01 11:01:56      阅读:44      评论:0      收藏:0      [点我收藏+]

标签:bin   style   flex   UNC   ble   方法   names   png   mic   

1007 素数对猜想 (20分)
 

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

现给定任意正整数N(<10?5??),请计算不超过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 }

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

技术图片

 

 

 

 

1007 素数对猜想

标签:bin   style   flex   UNC   ble   方法   names   png   mic   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!