取模運算性質 你所想知道密碼背後的數學 同餘運算

2021-10-14 01:31:26 字數 3537 閱讀 7797

密碼學已經有數千年的歷史,無論是在戰爭中,還是現在的全球網際網路都起著重要的作用。密碼學的神奇故事包含著兩大古老的領域——數論和概率論。

對於本文所討論的主題——同餘運算就屬於數論中的乙個重要概念。從孫子問題到凱撒密碼,再到 rsa 金鑰,同餘運算在這些經典的密碼問題中也發揮著至關重要的作用。

當我們把兩個整數 a, b 相除時(b ≠ 0),往往會得到下列等式

這裡 a 為被除數(dividend),b 為除數(divisor),q 為(quotient),r 為餘數(remainder)。

有時,當我們在做 a 除 b 的運算時,我們只關心餘數 r 的取值情況(當餘數為 0 時,被稱為整除)。人們定義計算餘數的計算為為取模運算(modulo operator),稱為模(記為 mod),這樣我們就得到了等式:

這個時候,我們說 a 模 b 與 r 相等,b 被稱作模數(modulus)。

例如:

為了更清楚地看到模是怎樣運算的,我們取 [0,11] 這個區間內的整數,並將它們都除以 3,觀察餘數的變化情況:

我們可以看到餘數從 0 開始,每次增長 1,直到接近除數為止。所以,在這個過程當中,餘數是迴圈的。我們不妨把所有餘數圍成乙個圓,隨著被除數的不斷增長,其餘數則是在這個圓裡迴圈。

這個過程和我們鐘錶的原理是一樣的,人們將一天分為二個以十二小時計算的單位。在 12 點時就會歸為 0 ,即鐘錶實際上是由模數為 12 的模算數。從表盤讀取時間其實就是同餘運算的過程。例如,我們在說 18 點時,很容易就可以想到是下午 6 點,因為這個時候時針從 0 點開始走過了 18 個數字,那麼我們可以從圖上看到,指標最後停到了 6 點。

如果用數學公式來表達這一過程,那就是

18 ÷ 12 = 1... 6

由於此時我們只關心餘數的取值,所以利用『模』這個式子同樣也可以寫為18mod 12=6

因此,當我們計算 amod b 時,可以遵循以下步驟:

將鐘錶的結構調整為 b 個數字

從 0 開始,移動 a 個數字

最後我們所在的地方就是我們的答案: 餘數 r

當然,如果 a 是正數我們就按順時針方向移動,如果是負數,則按逆時針方向移動。

試想,如果我們以 b 的整數倍來增大 a,那麼我們的終點將會是相同的。即對於任意的 k 有

例如,- 3 mod 10=3

如果 a 與 b 除以 c 有相同的餘數,那麼我們可以表達為

這個時候,我們可以稱 a 與 bmod c 是同餘(congruence modulo)。為了更好的了解同餘的這一概念,我們先來看一下所有整數模 5 的情況:

從上圖我們可以看到,我們把整數分為 5 個區域,分別標註為 0,1,2,3,4。而後,根據同餘運算把所有的整數都放入 5 個區域當中。

我們可以把這些區域想象成裝著一堆數字的袋子,舉個例子,26 應該是在標註為 1 的袋子中,因為 26mod 5=1。

從上圖中我們可以看到,1、6、11、16、21 同樣也在這個袋子裡。我們把這些在乙個袋子裡的數字稱作是乙個等價類(equivalence class)。

我們還可以觀察到,在這個等價類中數與數之間相差的都是 5 的整數倍。就是說,如果我們要把所有整數模 c,那麼將會得到 c 個袋子,每乙個袋子中的數都差 c 的整數倍。

在數學上,我們就用 a ≡ b(mod c) 來表示在這個情況,並讀作 a 同余於bmod c。在這個表達中,我們要注意:

1. ≡ 是乙個表示相同的、等價的符號。即 a 和 b 在乙個等價類中。

2. (mod c)告訴我們 a 和 b 要除的數。

3. 當以上兩種情況都滿足時,我們稱「≡」為模 c 的同餘

從上面模 5 的例子可以看出,我們把所有的整數看成乙個圓餅,通過模運算將其切成了五份,分為了五個等價類,對於這種告訴我們如何分出等價類的方法,我們稱為等價關係(equivalence relation)。

等價關係有三種性質:

- 自反性(reflexivity):a 與 a 有關。

- 對稱性(symmetry):若 a 與 b 有關,那麼 b 與 a 有關。

- 傳遞性(ransitivity):若 a 與 b 有關,b 與 c 有關,則 a 與 c 有關。

由於同餘運算也是等價關係,所以也就滿足這三條性質,比如:

- 3 ≡ 3(mod 5) (自反性)

- 若 3 ≡ 8(mod 5),那麼 8 ≡ 3(mod 5) (對稱性)

- 若 3 ≡ 8(mod 5),且 8 ≡ 18(mod 5),那麼 3 ≡ 18(mod 5) (傳遞性)

利用這三條性質,可以幫助我們完成很多模的運算。

數與數之間存在加減法運算,那麼模與模之間是否存在類似的呢?如果存在,這將更方便於我們的計算。

我們不妨假設模之間的運算是這樣的過程:

我們先來嘗試用乙個例子來驗證下,假設 a=12,b=9,c=7。

那麼我們得到,等式的左邊 (12+9)mod 7=0,等式的右邊 (12mod 7+9mod 7)mod 7=0。

因此,從這個例子來看,這個等式是成立的。

但是,這個等式為什麼成立,它又是怎樣運作的呢?我們在圖形上更直觀的角度來觀察一下

從上圖我們可以看出,只要是圍繞圓的完整環就不影響終點的位置,通過先計算 mod 7 可以幫助我們忽略圍繞圓的完整步數。通過加法運算,使得他們從 0 開始,順時針移動。

對於減法運算,我們只需要將 b 取為負數,直觀上,相減就視為逆時針地移動,公式如下:

(第一部分完)

取模運算性質

給定乙個正整數p,任意乙個整數n,一定存在等式 n kp r 其中 k r 是整數,且 0 r p,則稱 k 為 n 除以 p 的商,r 為 n 除以 p 的餘數。對於正整數 p 和整數 a,b,定義如下運算 取模運算 a p 或a mod p 表示a除以p的餘數。模p加法 其結果是a b算術和除以...

模運算性質

給定乙個正整數p,任意乙個整數n,一定存在等式 n kp r 其中 k r 是整數,且 0 r p,則稱 k 為 n 除以 p 的商,r 為 n 除以 p 的餘數。對於正整數 p 和整數 a,b,定義如下運算 取模運算 a p 或a mod p 表示a除以p的餘數。模p加法 其結果是a b算術和除以...

模運算及其性質

忘了是不是原創了,誰發現了位址請告知。本文以c 語言為載體,對基本的模運算應用進行了分析和程式設計,以理論和實際相結合的方法向大家介紹模運算的基本應用。基本理論 基本概念 給定乙個正整數 p,任意乙個整數 n,一定存在等式 n kp r 其中k r 是整數,且 0 r p 稱呼k為n 除以p的商,r...