筛选法求素数:
从3开始将素数的倍数依次标记,被标记的即为非素数
prime[4]=1;
for(i=3;i<Nmax;i++)
if(!prime[i])
for(j=i+i;j<Nmax;j+=i)
prime[j]=1;
**AC代码:**
#include<stdio.h>
#define Nmax 1000001
bool prime[Nmax];
int main(){
int N,M,i,j;
prime[4]=1;
for(i=3;i<Nmax;i++)
if(!prime[i])
for(j=i+i;j<Nmax;j+=i)
prime[j]=1;
scanf("%d",&N);
while(N--){
scanf("%d",&M);
int c=0;
for(i=3;i<=M-2;i++)
if(!prime[i]&&!prime[i+2])
c++;
if(M<3) c=0;
else if(M>3) c+=1;
else c=1;
printf("%d\n",c);
}
return 0;
}