欧拉线筛

Posted nlyzl

tags:

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

#include<bits/stdc++.h>

using namespace std;

int prime[5800000],ans; bool vis[100000000];

int main()

int a;

cin>>a;

int cnt=0;

for(int i=2;i<=a;i++)

    if(!vis[i])

      

      prime[++cnt]=i;    vis表示0为素数,1为合数

      

    for(int j=1;j<=cnt&&i*prime[j]<=a;j++)

    

       vis[i*prime[j]]=1;     此时  prime[j]为依次最小素数prime[j] 一定是 i 的最小素数

      if(i%prime[j]==0)   欧拉筛法的核心语句:判断去重,因为 prime[j]的倍数一定被标记过且为合数,所以当 i 为其倍数时直接break掉 ; 减少重复运算 

        break;

    

  printf("%d\n",cnt);

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

[洛谷P2158] [SDOI2008]仪仗队

欧拉筛(线性筛)

线性筛素数(欧拉筛)

新知识添加·欧拉回路+欧拉路径

欧拉筛和区间筛

线性(欧拉)筛&欧拉函数