当前位置 : 主页 > 编程语言 > c语言 >

素数筛

来源:互联网 收集:自由互联 发布时间:2023-09-07
好久没敲素数筛的代码了,有点手生,索性把代码存起来吧,有时间再看看 //这个代码利用了每个合数必有一个最小素因子来筛选,比较省时间 //在一亿的数据量下用时3016毫秒 #includ


好久没敲素数筛的代码了,有点手生,索性把代码存起来吧,有时间再看看
//这个代码利用了每个合数必有一个最小素因子来筛选,比较省时间
//在一亿的数据量下用时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;
}
上一篇:HDU3339 In Action(最短路+01背包)
下一篇:没有了
网友评论