zoukankan      html  css  js  c++  java
  • luogu P3383线性筛素数(埃氏筛)

    我已经頽到打模板的题解了


    本题是埃氏筛模板题

    埃拉托斯特尼筛法,简称埃氏筛或爱氏筛,
    是一种由希腊数学家埃拉托斯特尼所提出
    的一种简单检定素数的算法.
    
    感谢度娘所提供的解释
    

    埃氏筛简单来讲就是将一定范围内的数的除自身以外的所有倍数剔除,剩下的就是素数,在这里主要说一下这种方法的优化


    Step 1

    剔除除2以外的所有0<n<maxn的偶数

    Step 2

    剔除除1以外的所有0<n<maxn的奇数除自身以外的倍数

    在此可加一个小小的优化

    for(int i=3;i<=n;i++){
            if(!f[i]){
                for(int j=i*2;j<=n;j+=i){
                    f[j]=true;
                }
            }
        }
    

    这里的

     if(!f[i]){
    

    指此数未被判定为能被其他数整除的数(合数)

    有什么好处?

    当此数被判定为能被其他数整除的数(合数)时,此数的倍数必定也已经被判定为能被其他数整除的数(合数),如果此时再次剔除此数的倍数便会重复操作时间复杂度便会增加

    具体实现部分的代码如下

    void work_prime(int n)
    {
        for(int i=4;i<=n;i+=2){
            f[i]=true;
        }
        for(int i=3;i<=n;i++){
            if(!f[i]){
                for(int j=i*2;j<=n;j+=i){
                    f[j]=true;
                }
            }
        }
    }
    

    ( 逃

  • 相关阅读:
    Javascript高性能编程-提高Dom访问速度
    获取在线人数
    js倒计时
    支付宝支付
    微信扫码支付
    多条sql语句实现事物处理
    防止页面重复刷新
    bootstrapTable.js 使用
    org_chart.js 使用方法
    js上传图片及时显示
  • 原文地址:https://www.cnblogs.com/XJack/p/10841404.html
Copyright © 2011-2022 走看看