码迷,mamicode.com
首页 > 其他好文 > 详细

欧拉线筛

时间:2019-07-28 12:21:55      阅读:76      评论:0      收藏:0      [点我收藏+]

标签:using   判断   ace   mes   ram   bool   cti   表示   ==   

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

}

欧拉线筛

标签:using   判断   ace   mes   ram   bool   cti   表示   ==   

原文地址:https://www.cnblogs.com/nlyzl/p/11258376.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!