素数筛

来源:互联网 发布:阎良淘宝花店 编辑:程序博客网 时间:2024/06/09 22:58
好久没敲素数筛的代码了,有点手生,索性把代码存起来吧,有时间再看看
//这个代码利用了每个合数必有一个最小素因子来筛选,比较省时间  
//在一亿的数据量下用时3016毫秒
#include<stdio.h>#include<string.h>#include<time.h>#include<math.h>const int Max = 100000000;bool flag[Max];int prime[Max/3],pi;void saixuan(){    int i,j;    pi = 0;    memset(flag,0,sizeof(flag));    for(i=2;i<Max;i++)    {        if(flag[i] == 0)        {            prime[pi++] = i;        }        for(j=0;(j<pi) && (i*prime[j]<Max);j++)        {            flag[i*prime[j]] = 1;            if(i%prime[j] == 0)            {                break;            }        }    }}int main(){    int n;    int i;    saixuan();    while(scanf("%d",&n)!=EOF)    {        for(i=1;i<Max;i++)        {            if(prime[i]>n && prime[i-1]<=n)            {                printf("%d\n",i-1);                break;            }        }    }    return 0;}


0 0
原创粉丝点击