PAT 1007.素数对猜想(20)
让我们定义dn为:dn=pn+1−pn
,其中pi是第i个素数。显然有d1=1,且对于n>1有dn是偶数。"素数对猜想"认为 “存在无穷多对相邻且差为2的素数”。现给定任意正整数N(<10^5 ),请计算不超过N的满足猜想的素数对的个数。
输入格式:
输入在一行给出正整数N。
输出格式: 在一行中输出不超过N的满足猜想的素数对的个数。
输入样例:
20
输出样例:
4
题目分析:素数筛选法,O(n^2)求解素数会超时。
AC代码:
#include<cstdio>
#include<cmath>
const int max_n = 100010;
bool p[max_n];
int prime[max_n];
int num = 0;
int main(){
int n;
scanf("%d",&n);
for(int i=2;i<=n;++i){
if(p[i]==false){
prime[num++] = i;
}
for(int j=i+i;j<=n;j+=i){
p[j] = true;
}
}
int cnt = 0;
for(int i=0;i<num-1;++i){
if(prime[i+1]-prime[i]==2){
cnt++;
}
}
printf("%d",cnt);
return 0;
}