您的位置:首页 > 其它

素数筛选优化模板

2011-07-21 16:30 274 查看
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: