#include<stdio.h> #include<string.h> #include<stdlib.h> #include<math.h> #define MAXSIZE 10000000 int prim[MAXSIZE+5]; void fun() { memset(prim,0,sizeof(prim)); prim[0]=prim[1]=1; for(int i=4;i<=MAXSIZE;i+=2)//先将偶数筛掉 { prim[i]=1; } double t=sqrt(MAXSIZE);//记住t为double型 for(int i=3;i<=t;i+=2) { if(!prim[i])//一个优化,只有素数才进行以下筛选 。 { int k=i*i,p=i+i;//每次都是从k筛起,因为前面的都已近筛过了。每次加2i才仍旧为奇数。 for(int j=k;j<=MAXSIZE;j+=p) { prim[j]=1; } } } } int main() { fun(); int n; while(scanf("%d",&n)!=EOF) { for(int i=1;i<=n;i++) { if(!prim[i]) printf("%d\n",i); } } //system("pause"); return 0; }