zoukankan      html  css  js  c++  java
  • 素数 筛 理解

    埃拉托斯特尼筛法的时间复杂度是O(n*lglgn)

    bool vis[maxn];//能否被 素数合成 
    //int prime[maxn], cnt = 0;
    void Prime(int num) {
        for (int i = 2; i < maxn; i++) {
            if (vis[i]) continue;
    //        prime[++cnt] = i;
            for (int j = 2; j < maxn; j += i) {
                vis[j] = true;
            }
        }
    }

    线性筛 接近O(n)

    bool vis[maxn];//能否被 素数合成 
    int prime[maxn], cnt = 0;
    void Prime(int num) {
        for (int i = 2; i < maxn; i++) {
            if (!vis[i]) prime[++cnt] = i;
            for (int j = 1; j <= cnt && i * prime[j] < maxn; j++) {
                vis[i * prime[j]] = true;
                if (i % prime[j] == 0) break;
                /*
                这里的意义相当重要
                埃筛法比线性筛法久的原因在于在去除 素数可以组成的合数 的过程
                一个合数可能由多个 不同 质因数的次方 相乘
                而一个合数 可以看作为 一个最小素数与另一个数的乘积
                i 无论是作为一个 prime 还是合成的
                设 i 最大质因数的下标为 k 
                那么 i 下一步相乘的步骤 只能为在 1 到 k 里面选择一个素数
                为了不耗费太多时间 增加了一个 prime[k]就停止,不然跟埃筛法没太多区别 
                
                当前在 数轴 7^7 这个点上,去除的点最多 7^8 如果考虑到 7^7 * 11
                会在之后 7^6 * 11 这个点上重复 
                */
            }
        }
    }

    附带的是 偶数位数的回文 必定是 11 的倍数 ( 除了11 都是合数 ), 先证 一个数奇偶位和 的差 是11的倍数,则这个数为11的倍数

    证: dn dn-1 dn-2 ... d3 d2 d1

    每一位的贡献 为 dn * 10^(n-1)

    要想这一位的贡献是11的倍数 则加上 dn * 10^(n-2)

    那么原本 10^(n-2) 的贡献从 dn-1 * 10 (n-2) 变为了 (dn-1 - dn) * 10^(n-2)

    再进行上两行步骤 10^(n-3) 的贡献变为了 (dn-2 - (dn-1 - dn) ) * 10^(n-3) = (dn-2 - dn-1 + dn) * 10^(n-3)

    递推得到 最后一项 应该为 +- (dn - dn-1 + dn-2 ... d3 - d2 + d1)* 10^0 要想使得这个数字是11的倍数那么只要令 (dn - dn-1 + dn-2 ... d3 - d2 + d1)= 0

    所以设一个偶数位的回文数 sn sn-1 sn-2 sn-3 ... s3 s2 s1 s1 s2 s3 ... sn-3 sn-2 sn-1 sn

    每间隔一个数字取走求和, 在经过对称点s1 下一步会变成s2 然后 下标+2, 由对称性得 从s2 开始也是一样, 所以奇数位的 等于 偶数位的和 等于 s1 + s2 + s3 +... sn

    所以偶数位的回文数 为 11 的倍数

    //挺闲的

  • 相关阅读:
    硬件加速器为人工智能应用服务
    js 获取指定字符串个数
    js 仿微信投诉—引入vue.js,拆分组件为单个js
    css 图片波浪效果
    svg path命令
    谷歌浏览器—打断点调试页面
    js 实现加载百分比效果
    js 实现纵向轮播
    css 图片高度自适应
    js 禁止/允许页面滚动
  • 原文地址:https://www.cnblogs.com/Urchin-C/p/11386544.html
Copyright © 2011-2022 走看看