埃拉托色尼筛法

来源:互联网 发布:话费充值平台源码 编辑:程序博客网 时间:2024/06/16 03:41



思想:

        求解0~n之间所有素数并输出。先把0 和1删除,然后每次取当前最小的数入prime数组,同时把该最小数的倍数都删除。

最后得到全是素数的prime数组,和通常所说的素数打表一样。




模板代码:


#include <iostream>

#include <cstdio>
#include <cstring>
using namespace std;
#define N 1000010

bool is_prime[N];
int prime[N];
int n_prime;

void doprime()
{
    memset(is_prime, true , sizeof(is_prime));
    is_prime[1] = 0;
    n_prime = 0;
    for(int i  = 2 ; i < N; i++)
    {
        if(is_prime[i])
        {
            prime[n_prime++] = i;
            for(int j = i + i ; j < N; j += i )
                is_prime[j] = false;
        }
    }
}


int main()
{//freopen("in.txt","r",stdin);
    doprime();
    int n;
    while(~scanf("%d",&n))
    {
        for(int i = 0 ; i < n ; i++)
            printf("%d\n",prime[i]);
    }
    return 0;
}

0 0