题目摘自:
- PAT数据结构起步能力自测
让我们定义dnd_ndn为:dn=pn+1−pnd_n = p_{n+1}-p_ndn=pn+1−pn,其中pip_ipi是第iii个素数。显然有d1=1d_1 = 1d1=1,且对于n>1n>1n>1有dnd_ndn是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N(<105<10^5<105),请计算不超过N的满足猜想的素数对的个数。
输入格式:
输入在一行给出正整数N。输出格式:
在一行中输出不超过N的满足猜想的素数对的个数。
输入样例:
20
输出样例:
4
代码:
#include<stdio.h>
#include<math.h>
//by sunyi
main()
{
int i,j,N,num,q,sum,d;
int a[100000];
scanf("%d",&N);
sum=0;
num=0;
if(N>2)
{
for(i=3;i<=N;i++)
{
q=(int)sqrt(i);
for(j=2;j<=q;j++)
if(i%j==0)
break;
if(j>q)
a[sum++]=i;
}
/*for(i=0;i<sum;i++)
printf("%d\n",a[i]);*/
}
for(i=0;i<sum;i++)
{
if(i>0)
{
d=a[i]-a[i-1];
if(d==2)
{
num=num+1;
}
}
}
printf("%d\n",num);
}
- 大体思路:构建一个数据存储输入N以内的所有素数,最后用for循环检查每相邻两个素数之间的差,用num累加。