欧拉筛法模板代码

Posted leftstan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了欧拉筛法模板代码相关的知识,希望对你有一定的参考价值。

 

#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;
}

  

 

以上是关于欧拉筛法模板代码的主要内容,如果未能解决你的问题,请参考以下文章

算法模板:数论之质数全家桶(内含埃氏筛法,欧拉线性筛法详解)沈七

数学基础素数线性筛法--欧拉筛法模板普通筛法的优化

[模板]线性筛素数(欧拉筛法)

欧拉筛法求素数

欧拉筛法

质数判断(欧拉筛法)