原题链接:nyoj26 孪生素数
#include <stdio.h>
#define MAX 1000100 //多定义一点,防止查找越界
int prime[MAX]; //存放素数(素数库)
int isnotprime[MAX]; //下标存放素数
int main()
{
int N,i,j,num=0;
for(i=2;i<MAX;i++) //筛出MAX以内的所有素数
{
if(isnotprime[i]==0)
prime[num++]=i;
for(j=0; j<num && prime[j]*i<MAX; j++)
{
isnotprime[prime[j]*i]=1;
if(i%prime[j]==0)
break;
}
}
scanf("%d",&N);
while(N--)
{
int m,sum=0;
scanf("%d",&m);
if(m>2)
{
for(i=1; prime[i]<=m; i++) //查找m以内的孪生素数
{
if(prime[i]==prime[i-1]+1 || prime[i]==prime[i-1]+2)
sum++; //孪生素数计数
}
}
printf("%d\n",sum);
}
return 0;
}