透過 MCP 連接 →

輸入計算

數學公式

廣告

結果

最小非負餘數
6
結果落在 0 到 n − 1 的範圍內
算式值(取模前) 42
模數 n 12

什麼是模運算計算機?

模運算又稱「時鐘運算」:當數字達到固定的模數 \(n\) 後就會循環歸零。這個計算機會計算 \((a \text{ op } b) \bmod n\) 形式的算式,其中運算可以是加法、減法、乘法,或單純把一個數 \(a\) 對 \(n\) 取模。計算結果一律回傳最小非負餘數,也就是介於 0 到 \(n - 1\) 之間的數字。

從 0 到 11 的圓形數字環,箭頭顯示數值繞圈循環
模運算讓數字繞著大小為 \(n\) 的圓環循環。

如何使用

先輸入 \(a\) 的值,選擇運算方式,再填入 \(b\)(選「僅取模」時會忽略 \(b\)),最後設定模數 \(n\)。計算機會先算出原始算式的值,再對 \(n\) 取模。負數結果會被轉換到標準的 \(0 \ldots n-1\) 範圍內,因此 \(-1 \bmod 12\) 會得到 11,而不是 \(-1\)。

公式說明

核心關係式為 $$r = (a \text{ op } b) \bmod n.$$ 由於程式語言中的取餘運算可能產生負值,我們改用歐幾里得形式 $$r = ((x \bmod n) + n) \bmod n,$$ 以確保結果必為非負。這與數論、密碼學與雜湊運算中採用的數學慣例完全一致。

Advertisement
劃分為等長區塊的數線,顯示負值映射到非負餘數
負數映射到 0 到 \(n-1\) 之間相同的最小非負餘數。

範例演算

假設 \(a = 17\)、運算為加法、\(b = 25\)、\(n = 12\)。先計算 $$17 + 25 = 42,$$ 接著求 \(42 \bmod 12\):因為 \(42 = 3 \times 12 + 6\),所以餘數為 6。換句話說,在 12 小時制的時鐘上,17 + 25「小時」會落在第 6 個位置。

常見問題

「mod」是什麼意思?它代表除法後的餘數。例如 \(13 \bmod 5 = 3\),因為 \(13 = 2 \times 5 + 3\)。

為什麼我輸入的負數變成正數了?因為我們回傳的是最小非負餘數。例如 \(-7 \bmod 5 = 3\),因為加上兩個 5(\(-7 + 10 = 3\))後就落在 \(0 \ldots 4\) 的範圍內。

如果 \(n = 1\) 會怎樣?任何整數對 1 取模都同餘於 0,所以結果永遠是 0。

最後更新: