#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;
}
posted on 2011-07-21 16:30  枫叶飘泪  阅读(247)  评论(0编辑  收藏  举报