让我们定义 dn 为:dn = pn+1 − pn ,其中 pi 是第 i 个素数。显然有 d1 = 1 ,且对于 n > 1 有 dn 是偶数。“素数对猜想”认为“存在无穷多对相邻且差为 2 的素数”。
现给定任意正整数 N ( < 105),请计算不超过 N 的满足猜想的素数对的个数。
输入格式:
输入在一行给出正整数N。
输出格式:
在一行中输出不超过N的满足猜想的素数对的个数。
输入样例:
20
输出样例:
4
思路:
1、根据素数的定义,找到小于 N 的所有素数。
2、通过 front 和 now 保存相邻的两个素数,并检验差是否为 2 。
3、可以通过 sqrt() 减少计算量。
4、如果不在意空间的花费,可以保存所有的素数,进一步减少计算。
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int main()
{
int i, j, n;
int front = 0, now = 0, count = 0;
scanf("%d", &n);
for (i = 1; i <= n; i++)
{
for (j = 2; j <= sqrt(i); j++)
{
if (i % j == 0)
{
break;
}
}
if (j > sqrt(i))
{
front = now;
now = i;
if (now - front == 2)
{
count++;
}
}
}
printf("%d\n", count);
system("pause");
return 0;
}