素数筛选再优化

#include"stdio.h"
#include"string.h"
#include"stdlib.h"
#include"math.h"
int set[10000000]={0};
int p[5000000];
void  fun(int n)
{
   int t=(int )sqrt(n+1);
   for(int i=3;i<=t;i+=2)
   {
        if(set[i/2])
          continue;
         int k=i*i,p=i+i;
         for(int j=k;j<=n;j+=p)
         {
            set[j/2]=1;    
         }  
   }
   int count=0;
   p[++count]=2;
   t=(n+1)/2;
   for(int i=1;i<t;i++)
   {
       if(set[i]==0)
          p[++count]=i+i+1;   
   }
   for(int i=1;i<count;i++)
   {
       printf("%d\n",p[i]);   
   }
}
int main()
{
    int n;
    scanf("%d",&n);
    fun(n);
 //   system("pause");
    return 0;
}

posted @ 2011-07-25 10:15  bcy  阅读(127)  评论(0编辑  收藏  举报