欧拉筛法模板代码

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#define MAXN 100000
using namespace std;
int pri[MAXN];///质数数列
bool vis[MAXN];///访问标志,也可记录最小素因子
int cnt = 0;///质数个数
void euler_sieve()
{
    memset(pri, 0, sizeof(pri));
    memset(vis, false, sizeof(vis));
//vis[0] = vis[1] = false;
//pri[1] = pri[2] = 1;
    for(int i = 2; i < MAXN; i++)
    {
        if(!vis[i])pri[cnt++] = i;
        cout<<"prime"<<cnt<<":"<<pri[cnt-1]<<endl;
        for(int j = 0; j < cnt && i * pri[j] < MAXN; j++)
        {
//ecout<<i*pri[j]<<endl;
            vis[i*pri[j]] = true;
            if(!(i%pri[j]))break;
        }
    }
}

int main()
{
    int n;
    while(~scanf("%d", &n))
    {
        euler_sieve();
        for(int i = 0; i < cnt; i++)cout<<pri[i]<<endl;
    }
    return 0;
}

  

 

原文地址:https://www.cnblogs.com/leftstan/p/13845119.html