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 的倍数

    //挺闲的

  • 相关阅读:
    Luogu P4316 绿豆蛙的归宿 题解报告
    Luogu P1850 换教室(NOIP 2016) 题解报告
    Rainbow的信号 题解报告
    $CH5105 Cookies$ 线性$DP+$贪心
    算法竞赛 $0×50$ 动态规划 (+一本通
    $CH5104 I-country$ 线性$DP$
    洛谷$2014$ 选课 背包类树形$DP$
    $SP703 Mobile Service DP$
    $POJ1015 Jury Compromise Dp$/背包
    $POJ1742 Coins$ 多重背包+贪心
  • 原文地址:https://www.cnblogs.com/Urchin-C/p/11386544.html
Copyright © 2011-2022 走看看