zoukankan      html  css  js  c++  java
  • 素数筛法详解:欧拉筛素数

    当数据量很大时,我们不能一个一个去判断每个数是否为素数,那么我们可以采用欧拉筛来做

    由于埃氏筛会存在某个合数多次被筛的情况,所以

    欧拉筛的核心思想就是:让每个合数只被它的的最小质因子筛选一次,没有重复

    欧拉筛:时间复杂度为O(n),所以也称为线性筛,但只能筛到1e8这么大

     1 const int maxn=100000005;
     2 int prime[maxn];//素数表 
     3 bool sf[maxn];//判断是不是素数 
     4 //欧拉筛素数:
     5 void sushu(int n){
     6     int cnt=0;
     7     memset(sf,true,sizeof(sf));//开始全设为是素数 
     8     for(int i=2;i<=maxn;i++){//外层枚举所有数 
     9         if(sf[i]) prime[++cnt]=i;//是质数加入质数表 
    10         for(int j=1;j<=cnt;j++){//内层枚举cnt以内的质数prime[j] 
    11             if(i*prime[j]>maxn) break;//筛完结束 
    12             sf[i*prime[j]]==false;//筛掉合数:置合数为false 
    13             if(i%prime[j]==0) break;//重点:避免重复筛 
    14         }
    15     }
    16     sf[0]=false;
    17     sf[1]=false; 
    18 } 
  • 相关阅读:
    例3-7 统计字符
    大一第四周
    例3-5 四则运算
    MyBatis 查询缓存
    MyBatis 延迟加载
    Mybatis 关联查询
    Mybatis 动态SQL
    MyBatis mapper动态代理
    MyBatis 增删改查
    MyBatis 框架搭建
  • 原文地址:https://www.cnblogs.com/nilbook/p/13775230.html
Copyright © 2011-2022 走看看