素数筛选优化模板

#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;

}

你可能感兴趣的:(优化)