1007. 素数对猜想 (20)——素数判断算法

来源:互联网 发布:sql select 嵌套 编辑:程序博客网 时间:2024/05/11 17:13

1、题目描述

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

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

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

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

输入样例:
20
输出样例:
4
2、思路分析
首先,此题涉及素数判断,可以编写bool IsPrime(int x),用来完成素数判断的功能;
然后,直接循环判断素数对个数即可,为了使计算时间尽量低,循环中只处理奇数,且每个奇数保证最多只判断一次。
3、C++代码
#include<iostream>#include<algorithm>#include<string.h>#include<stdio.h>#include<vector>#include<string>#include<stack>#include<queue>#include<math.h>#include<map>using namespace std;int N,Count;void Input(){scanf("%d",&N);}bool IsPrime(int x){int l=sqrt((double)x);for(int i=2;i<=l;i++)if(x%i==0)return false;return true;}void Process(){Count=0;int i=5;while(i<=N){if(IsPrime(i)){  //判断紧跟第一个素数后面的奇数是否为素数Count++;i+=2;}else{  //从小到大找到第一个素数i+=2;while(!IsPrime(i))i+=2;i+=2;}}}void Display(){printf("%d\n",Count);}int main(){//while(true){Input();Process();Display();//}return 0;}

0 0