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 } 
  • 相关阅读:
    进度条加载
    插件
    倒计时
    阿里云oss教程
    拖拽排序插件 ---- Dragula
    预览图片代码
    Error: spawn xxxx ENOENT原因与解决
    关于环境配置的随笔
    js下载文件
    QuickStart系列:docker部署之redis
  • 原文地址:https://www.cnblogs.com/nilbook/p/13775230.html
Copyright © 2011-2022 走看看