题目
[1007]. 素数对猜想 (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
思路!!!:
为了节约时间循环的起点可以从3开始(作为素数2不满足条件),而且一切大于2的偶数都不可能为素数,所以没必要进行素数的判断所以控制循环的i以i+=2的方式递增。刚开始做的时候因为素数判断的方式不够优化导致内存超时,所以老大推荐了另外一种以i*i<=n的方式递增的循环方式
c++代码如下:
#include"iostream"
using namespace std;
bool check(int n) //素数判定函数
{
int i;
for(i=2;i*i<=n;i++) //i*i<=n减少时间
{
if(n%i==0)
return false;
}
return true;
}
int main()
{
int n;
int ant=0;
int i=3;
cin>>n;
for(;i+2<=n;i+=2)
{
if(check(i))
{
if(check(i+2))
{
ant++;
}
else
i+=2;
}
}
cout<<ant;
return 0;
}