时间限制: 400 ms 内存限制: 64 MB
代码长度限制: 16 KB
让我们定义dn 为:dn =pn+1 −pn ,其中pi 是第i个素数。显然有d1 =1,且对于n>1有dn是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N(<10
5
),请计算不超过N的满足猜想的素数对的个数。
输入格式:
输入在一行给出正整数N。
输出格式:
在一行中输出不超过N的满足猜想的素数对的个数。
输入样例:
20
输出样例:
4
本题可以采用标记法标记出小于n的所有素数的位置,再判断中间间隔一个的素数对有多少
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int x[100000]={0};
//先初始化为“0”,认为全部为偶数,在进行判断;
int n,count=0;
int i,j;
scanf("%d",&n);
for(i=2;i<=n; i++)
{
for(j=2;j<=sqrt(i);j++)
//注意由于时间限制只有400ms所以不能用j<=n,否则会超时;
if(i%j==0)
break;
if(j>sqrt(i))
x[i]++;
//标记处第i个位素数;
}
for(i=0;i<n;i++)
{
if(x[i]!=0&&x[i+2]!=0)
//找出第i个为素数且第i+2个也为素数的素数对;
count++;
}
printf("%d\n",count);
return 0;
}