同餘定理與費馬(Fermat)小定理
1 同餘定理定義
如果兩個整數a和b,(a-b)能被m整除,則a和b被m除的餘數相同,記做
如果有,則
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互質,那麼 。
證明:
給出數列:
我們假定數列中的兩項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)不成立,也就是數列中任意兩項被p除的餘數都不可能相等。
而任意整數被p除的餘數只能是{1,2,3,4......p-1},總共p-1項。
數列總共有p-1項,所以數列中的數被p除的餘數是{1,2,3,4......p-1}
根據上面提到同餘的乘法定理有:
簡化得:
根據上面提到同餘的除法性質有(顯然有p-1階乘中的每一項都與p互質):
參考: