1. 程式人生 > >同余 模算術 中國剩余定理

同余 模算術 中國剩余定理

blog dsm spa p s color class style exgcd trac

相關知識點:

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,就是所求的數。





同余 模算術 中國剩余定理