1. 程式人生 > >同餘定理與費馬(Fermat)小定理

同餘定理與費馬(Fermat)小定理

1 同餘定理定義

如果兩個整數a和b,(a-b)能被m整除,則a和b被m除的餘數相同,記做

如果有\left (a-b \right )| m,則a\equiv b (mod\ b)

2 同餘定理證明

充分性:

假定(其中r1和r1小於m,h1和h2為整數)

a = h1*m+r1

b = h2*m+r2

則a-b = (h1-h2)*m + (r1-r2)

因為,則r1-r2=0,即r1=r2,得證

必要性:

整數a,b,被整數m除的餘數相同,其中h1和h2為整數,r為餘數,則有

a=h1*m+r

b=h2*m+r

(a-b)=h1*m+r-h2*m-r=(h1-h2)*m

因為h1和h2為整數,(h1-h2)為整數;所以,a-b能被m整除,得證。

3 同餘定理性質(只列與證費馬小定理相關的)

3.1 乘法定理

如果a≡b(mod m),x≡y(mod m),則ax≡by(mod m)。
    證明:條件告訴我們,a-mp = b-mq,x-mr = y-ms。於是(a-mp)(x-mr) = (b-mq)(y-ms),等式兩邊分別展開後必然是ax-m(…) = by-m(…)的形式,這就說明ax≡by(mod m)。

    現在你知道為什麼有的題要叫你“輸出答案mod xxxxx的結果”了吧,那是為了避免高精度運算,因為這裡的結論告訴我們在運算過程中邊算邊mod和算完後再mod的結果一樣。假如a是一個很大的數,令b=a mod m,那麼(a * 100) mod m和(b * 100) mod m的結果是完全一樣的,這相當於是在a≡b (mod m)的兩邊同時乘以100。這些結論其實都很顯然,因為同餘運算只關心餘數(不關心“整的部分”),完全可以每一次運算後都只保留餘數。因此,整個運算過程中參與運算的數都不超過m,避免了高精度的出現。

3.2 除法定理

如果ac≡bc(mod m),且c和m互質,則a≡b(mod m) (就是說同餘式兩邊可以同時除以一個和模數互質的數)。
    證明:條件告訴我們,ac-mp = bc-mq,移項可得ac-bc = mp-mq,也就是說(a-b)c = m(p-q)。這表明,(a-b)c裡需要含有因子m,但c和m互質,因此只有可能是a-b被m整除,也即a≡b(mod m)。

4 費馬小定理

費馬小定理: 假如p是質數,且gcd(a,p)=1,即a,p互質,那麼 a^{p-1}\equiv 1\left ( mod\ p \right )

證明:

給出數列:A_{n}=1a,2a,3a,4a......(p-1)a

我們假定數列中的兩項ma和na被p除後的餘數相同,即ma ≡ na(mod p),根據同餘定理:

ma-na=(m-n)a能被p整除,即

(m-n)a|p

因為a與p互質,所以只能(m-n)是p的倍數(m-n不等於0,因為前提假設是不同的兩項)。但是m,n屬於數列{1,2,3,4......p-1},所以m-n不可能是p的倍數,則假設ma ≡ na(mod p)不成立,也就是數列A_{n}中任意兩項被p除的餘數都不可能相等。

而任意整數被p除的餘數只能是{1,2,3,4......p-1},總共p-1項。

數列A_{n}總共有p-1項,所以數列A_{n}中的數被p除的餘數是{1,2,3,4......p-1}

根據上面提到同餘的乘法定理有:

\LARGE 1a*2a*3a......(p-1)a\equiv 1*2*3....(p-1)(mod\ p)

簡化得:

\LARGE (p-1)!*a^{^{p-1}}\equiv (p-1)!(mod\ p)

根據上面提到同餘的除法性質有(顯然有p-1階乘中的每一項都與p互質):

\LARGE a^{p-1}\equiv 1(mod\ p)

參考: