zoukankan      html  css  js  c++  java
  • 中国剩余定理

    EXCRT戳这里
    先导知识:扩展欧几里得, 逆元。

    引理1:若 (SUM = sum_{i = 1}^{n}a_{i}) 且其中只有一个数 (a_{k}) 不能被(P)整除, 那么(SUM) 不能被 (P) 整除, 且余数为 (a_{k} mod P)

    引理2:在一个不能整除的式子中,若被除数扩大 (n) 倍,则余数在不超过除数的情况下同时扩大 (n)

    (S = prod_{i = 1}^{n}m_{i})(M_{i} = S / m_{i}), 因为模数两两互质,所以 (M_{i}) 不能被 (m_{i}) 整除(互质)

    (t_{i}) 满足 (M_{i}t_{i} equiv 1 (Mod m_{i})), 即为 (M_{i})(Mod m_{i}) 意义下的逆元

    如何保证其有解呢?这个同余方程有解, 当且仅当 (1 | gcd(m_{i}, M_{i})); 然而上面就已经得到这两数互质, 即 (gcd(m_{i}, M_{i}) = 1)中国剩余定理在模数互质的情况下总有解

    现在我们得到了 (M_{i}t_{i} equiv 1(Mod m_{i}))

    依据引理2, 两边同时乘以 (a_{i}) , 有: (a_{i}M_{i}t_{i} equiv a_{i} (Mod m_{i}))

    现在令 (Ans = sum_{i = 1}^{n}a_{i}M_{i}t_{i}), 这个数满足两个重要条件:

    对于 (k) 讨论:

    (Ans) 分为两部分, 第一部分为 (One = a_{k}M_{k}t_{k}), 第二部分为 (Two = Ans - a_{k}M_{k}t_{k} = sum_{i = 1}^{n}a_{i}M_{i}t_{i}, i ot= k)

    对于第一部分, 有 (One equiv a_{k} (Mod m_{k}))

    对于第二部分, 因为 (Two = sum_{i = 1}^{n}a_{i}M_{i}t_{i}, i ot= k) 中每一项加数都含有 (m_{k}) 这一因子,故 (Two equiv 0 (Mod m_{k}))

    我们的 (Ans = One + Two)引理1可得, (Ans) 满足 (Ans equiv a_{k} (Mod m_{k}))

    因为讨论的 (k) 具有任意性, 故中国剩余定理的通项解为 $$sum_{i = 1}^{n}a_{i}M_{i}t_{i}$$

    证毕。

    其中 (t_{i}) 可以有扩展欧几里得算法解得


    Code

    LL exgcd(LL a,LL b,LL &x,LL &y){
        if(!b){x = 1,y = 0;return a;}
        LL d = exgcd(b,a % b,x,y);
        LL temp = x;x = y,y = temp - y * (a / b);
        return d;
        }
    LL China(){
        LL ans = 0,M = 1;
        for(int i = 1;i <= num;i++)M *= I[i].m;
        for(int i = 1;i <= num;i++){
            LL m = M / I[i].m;
            LL d = exgcd(m,I[i].m,x,y);
            ans = (ans + I[i].a * m * x) % M;
            }
        if(ans < 0)ans += M;
        return ans;
        }
    
  • 相关阅读:
    二叉树:树的创建和遍历
    Django之博客系统:增加标签
    python数据分析之:数据清理,转换,合并,重塑(二)
    Django之博客系统:增加评论
    python数据分析之:数据清理,转换,合并,重塑(一)
    Django之博客系统搭建一
    队列:顺序队列和循环队列
    自己动手开发网络服务器(三):实现多线程
    ubuntu中设置wireshark抓包
    【原创】运维基础之OpenResty
  • 原文地址:https://www.cnblogs.com/Tony-Double-Sky/p/9318238.html
Copyright © 2011-2022 走看看