小學時,大家應該已經很熟悉「如何判斷乙個數能否被3或9整除」的問題。然而,為何乙個數的各位數的和能被3或9整除時,該數即可以被3或9整除呢?又為何個位數是偶數時,該數即為偶數呢?有沒有類似的簡單的方法來判斷乙個數能否被7,被11整除呢?
模運算可以很好地給出問題的答案。
什麼是模運算呢?學過離散數學基礎或是有過程式設計經驗的同學應該都知道這個概念。當我們用乙個數d去除另乙個數a時,如果不能整除,則會產生餘數。即,a÷d=m……n,其中0
一般地,如果整數a和b用d除有相同的餘數,即有乙個整數n使得a-b=nd成立(此處,d為一固定整數),我們就說a和b是摸d同餘的,記做a≡b(mod d)。例如,17≡25(mod 4)。
模運算有哪些性質,讓其很有用呢?
1)自反性。即恒有a≡a(mod d)
2)交換性。如果a≡b(mod d),則b≡a(mod d)。
3)傳遞性。如果a≡b(mod d),且b≡c(mod d),則a≡c(mod d)。
除以上三個基本性質外,下面幾個類似於數**算中「=」的性質使模運算具有無與倫比的優勢。
如果a≡a'(mod d),b≡b'(mod d),則
4)可加性。a+b≡a'+b'(mod d)。
5)可減性。a-b≡a'-b'(mod d)。
6)可乘性。a×b≡a'×b'(mod d)。
到這裡,我們已經可以解決本文開頭所提出的問題了。
首先我們來討論下關於能被3和9整除的故事。
1)對於任何乙個在十進位制系統中表示的整數z = a_0 + a_1×10 + a_2×10^2 + a_3×10^3 + …,很容易發現1≡10≡10^2≡10^3≡…≡10^n(mod 3)。應用模運算的可乘性和可加性即可知:z≡(a_0+a_1+a_2+a_3+...)mod 3。故,若乙個整數的各位數之和能被3整除,即模3餘0時,則該整數能被3整除。
2)關於能被9整除的原因,由於1≡10≡10^2≡10^3≡…≡10^n(mod 9),故同理可得。
下面我們來看下其他一些特殊的情況。
3)對於2來說,由於1≡1(mod 2),而0≡10≡10^2≡10^n(mod 2),故z≡a_0(mod 2)。
4)對於5來說,由於1≡1(mod 5),而0≡10≡10^2≡10^n(mod 5),故z≡a_0(mod 5)。
接下來,我們可以來看下那些我們不是那麼熟悉的情況了。
5)對於4來說,由於1≡1(mod 4),2≡10(mod 4),而0≡10^2≡10^3≡10^n(mod 4),故z≡(a_0+2×a_2)(mod 4),即乙個數的個位數+十位數*2後可以被4整除,則該數可以被4整除。(或者我們可以直接用最後兩位數來判斷乙個數能否被4整除。比如,由於24能被4整除,所以1357872623333324能被4整除)
6)對於8來說,與4的情況類似。z≡(a_0 + 2×a_2 + 4×a_3)(mod 8)。(即,只看最後三位數能否被8整除即可。)
7)6在0-9中比較特殊,因為其是唯一乙個有兩個質數為因數的數。故我們可以用是否能被2和3整除來判斷其能否被6整除。(末尾數為偶數,其各位數和可被3整除。)
8)最為麻煩些的數是7,因為1≡1(mod 7),10≡3(mod 7),100≡2(mod 7),1000≡-1(mod 7),10000≡-3(mod 7),100000≡-2(mod 7),再向下為重複。故z≡(a_0 + 3×a_1 + 2×a_2 - 1×a_3 - 3×a_4 - 2×a_5 + ....)(mod 7)。當然,運算比較麻煩,不過還是比直接除要簡單些。其可以大大降低位數,在一些數字類題目中還是有用的。
9)另乙個讓我們有些驚喜的數是11。因為1≡1(mod 11),10≡-1(mod 11),100≡1(mod 11),1000≡-1(mod 11)……後面,1和-1便會交替出現了。故z≡(a_0 - a_1 + a_2 - a_3 + a_4 - a_5 + ....)(mod 11)。
費馬還有乙個跟模運算有關的定理。a^(p-1)≡1(mod p),另外還有關於二次剩餘的概念。
當然,模運算美妙的地方還在於它在生活中的奇妙應用。比如,時鐘…… 比如,模冪運算,凱撒密碼……
神奇的運算子 取模
最近在看雜湊表,把相應的雜湊值雜湊分組到相應的slot 槽 中,中間用到了大量的移位運算和取模。今天測試取模運算的時候,發現了乙個取模運算的知識點。例如 4取模2 0 4取模4 0 用二進位制表示就是 4 2 0100 紅色部分得出的結果是0 4 4 0100 紅色部分得出的結果還是0 如果一直往下...
常用的模運算
對於正整數和整數 定義如下運算 取模運算 a p 或a mod p 表示a除以p的餘數。模p加法 a b p 其結果是a b算術和除以p的餘數,也就是說,a b kp r,則 a b p r。模p減法 a b p 其結果是a b算術差除以p的餘數。模p乘法 a b p,其結果是 a b算術乘法除以p...
神奇的位運算 bitwise trick
在計算機中,資料都以二進位制補碼的形式儲存,根據這一特點,適當採用位運算 bitwise operation 可以很巧妙地解決問題,同時運算效率更高。時刻牢記,最大的負數是 1,在計算機中,它的儲存形式是全1。左移相當於乘以2,友誼相當於除以2.在計算機中,位運算比乘法 除法運算要快得多,所以適當採...