zoukankan      html  css  js  c++  java
  • 同余 模算术 中国剩余定理

    相关知识点:

    1、a≡b(modc)。a,b关于模c同余  ,即a modc=b mod c 。 等价于a%c=b

    2、假设a,b互质(a,b)=1,则可得a关于模b的逆 ax≡1(modb) 

    3、关于余数的定理:

    定理1 :假设被除数加上(或减去)除数的整数倍,除数不变,则余数不变。


         定理2 :假设被除数扩大(或缩小)几倍。除数不变。则余数也扩大(或缩小)相同的倍数。
         定理3: 假设整数a除以自然数b(b≠0)。余数r仍不小于b。则r除以b的余数等于a除以b所得余数。

    (余数和被除数关于除数同余)

    4.中国剩余定理:

    设m1,m2,...,mk是两两互素的正整数,对于随意的正整数a1,a2,a3,..,ak
    同余方程组:
    x≡a1 (mod m1)
    x≡a2 (mod m2)
    ...
    x≡ak (mod mk)
    必有解,
    且解可写为
    x≡M1P1a1+M2P2a2+....MkPkak  (mod m)
    当中
    M=m1m2m3....mk
    Mi=M/mi,(1<=i<=k)

    证明:令Mi=M/mi ,则Mi和mi互质,则(Mi,mi)=1,即 MiPi≡1(mod mi),                                         ——模逆
           等价于MiPi %mi=1,要使 MiPi%mi=ai。仅仅要将被除数乘以a1(由定理2得
    易知同余方程组的解为x≡M1P1a1+M2P2a2+....MkPkak  (mod m)

    算法模板:

    int m[maxn],a[maxn];
    void exgcd(int a,int b,int &d,int &x,int &y)
    {
        if(!b) d=a,x=1,y=0;
        else exgcd(b,a%b,d,y,x),y-=x*(a/b);
    }
    intChina(int r)
    {
        int M,d,x0,y0,ans=0;
        for(int i=1;i<=r;i++){
            M*=m[i];
        }
        for(int i=1;i<=r;i++){
            int Mi=M/m[i];
            exgcd(Mi,m[i],d,x0,y0);
            ans=(ans+Mi*x0*a[i])%M;
        }
        if(ans<0) ans+=M;
        return ans;
    }



    ———————————————————————切割线———————————————————————————
    下面来自转载。有助于理解中国剩余定理的证明(拿着学长的书慢慢啃数论吧。。

    。)


    公元前后的《孙子算经》中有“物不知数”问题:“今有物不知其数,三三数之余二 。五五数之余三 ,七七数之余二,问物几何?”答为“23”。 --------这个就是传说中的“中国剩余定理”。

         事实上题目的意思就是,x%3=2,x%5=3,x%7=2;问x最小是多少?

     解法:

            1.首先找到3,5。7,的三个“关键数字”,即[5,7]=35;[3,7]=21;[3,5]=15

            2.让35a%3=1,a=2;  让21b%5=1,b=1;  让15c%7=1,c=1(我们这里要让余数为1。是为了要求余数2的话。仅仅要乘以2就能够,要求余数为3的话。仅仅要乘以3就能够了。……)

            3.所以 然后。35*2*2=140    21*1*3=63  15*1*2=30

            4.  Then 140+63+30=233  ,由于233>3*5*7  , 所以233- 105*2=23 

     

     

     上几个百度上的例题(我们会发现给出的除数都是亮亮互质的,显然……):

           例1:一个数被3除余1,被4除余2,被5除余4。这个数最小是几?

                    题中3、4、5三个数两两互质。则〔4,5〕=20;〔3。5〕=15;〔3,4〕=12;〔3,4。5〕=60。为了使20被3除余1,用20×2=40。使15被4除余1。用15×3=45。使12被5除余1,用12×3=36。然后,40×1+45×2+36×4=274,由于,274>60。所以,274-60×4=34,就是所求的数。

            例2:一个数被3除余2。被7除余4。被8除余5。这个数最小是几?

                    题中3、7、8三个数两两互质。则〔7。8〕=56;〔3,8〕=24。〔3,7〕=21;〔3,7,8〕=168。为了使56被3除余1,用56×2=112。使24被7除余1,用24×5=120。

    使21被8除余1,用21×5=105。然后,112×2+120×4+105×5=1229,由于,1229>168。所以,1229-168×7=53。就是所求的数。

             例3:一个数除以5余4,除以8余3,除以11余2,求满足条件的最小的自然数。

                     题中5、8、11三个数两两互质。则〔8。11〕=88;〔5,11〕=55。〔5。8〕=40;〔5,8。11〕=440。

    为了使88被5除余1,用88×2=176;使55被8除余1。用55×7=385。使40被11除余1。用40×8=320。

    然后。176×4+385×3+320×2=2499,由于,2499>440,所以,2499-440×5=299,就是所求的数。





  • 相关阅读:
    python基础-------模块与包(一)
    python基础-------函数(三)
    python基础-------函数(二)
    python基础-------函数(一)
    python基础(三)----字符编码以及文件处理
    python基础(二)-------数据类型
    python基础(一)------Python基础语法与介绍
    linux进程、软件包的安装和删除,及安装python3.6(源代码方式)
    Linux磁盘分区、打包压缩、软硬链接练习
    linux关于目录或文件权限的练习
  • 原文地址:https://www.cnblogs.com/liguangsunls/p/7072405.html
Copyright © 2011-2022 走看看