1007. 素数对猜想 (20)
让我们定义 dn 为:dn = pn+1 - pn,其中 pi 是第i个素数。显然有 d1=1 且对于n>1有 dn 是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N (< 105),请计算不超过N的满足猜想的素数对的个数。
输入格式:
每个测试输入包含1个测试用例,给出正整数N。
输出格式:
每个测试用例的输出占一行,不超过N的满足猜想的素数对的个数。
输入样例:20
输出样例:
4
因为2是第一个素数又明显不符合题目要求,所以我们其实是从3开始找的,3和5是第一对,以后每对最后的结尾必然是1和3、7和9或者是9和1(以5结尾的必能被5整除,而且成为一对以后就不能算进下一对了,比如3和5的下一对是7和9,而不是5和7)。所以我先是专门写了一个函数用来判断是不是素数的,然后每次循环计数的i都加2,如果是素数对就跳到下一个奇数上。代码如下:
#include<stdio.h>
#include<math.h>
int Sushu(int i);
int main(void)
{
int n,s=0,i;
scanf("%d",&n);
if (n>=3) s=1;
for(i=5;i+2<=n;i+=2)
{
if (Sushu(i)&&Sushu(i+2))
{
s++;i+=2;
}
}
printf("%d\n",s);
return 0;
}
int Sushu(int i)
{
int f=1,j;
for(j=3;j<=sqrt(i);j+=2)
{
if (i%j==0)
{
f=0;break;
}
}
return f;
}