模運算計算器(Mod 計算器)

支援4種模式的模運算計算器:基本mod、模加減乘運算、模冪運算(快速冪/平方求冪法)、模逆元(擴充套件歐幾里得演算法)。使用 BigInt 精確處理負數取模和超大指數運算。

模運算的基本性質

性質 說明
(a + b) mod n = ((a mod n) + (b mod n)) mod n 無論是先取模再相加,還是先相加再取模,結果都是相同的。
(a − b) mod n = ((a mod n) − (b mod n) + n) mod n 由於減法的結果可能為負數,最後需要加上 n 再對 n 取模一次,才能將結果收斂到 [0, n) 的範圍內。
(a × b) mod n = ((a mod n) × (b mod n)) mod n 與加法相同,乘法在計算過程中取模也不會改變最終結果。這一性質正是快速冪(平方求冪法)演算法的基礎。
a 和 n 互質 ⇔ a 模 n 的逆元存在 只有當擴充套件歐幾里得演算法求出 gcd(a, n) = 1 時,才存在滿足 a × x ≡ 1 (mod n) 的 x(逆元)。

Tips

  • 不同程式語言對負數取模的處理方式並不相同。本工具遵循數學上的定義(結果始終在0以上、小於n),因此 -7 mod 3 的結果是2,而不是 -1。
  • 冪運算模式採用"平方求冪法"計算,即使指數長達數百位也能瞬間得出結果。RSA加密演算法的加密解密過程也使用了相同的演算法。
  • 時鐘的時間是模運算最貼近生活的例子。把"15點"換算成12小時制,就是 15 mod 12 = 3點。
  • 即使 n 不是素數,只要 a 和 n 互質(最大公約數為1),逆元模式就能正常計算。
  • 在競技程式設計中,經常會要求把巨大的答案對 1,000,000,007 等大素數取模後再輸出,而不是直接輸出原始答案。本工具的冪運算模式也可以用來驗證這類計算。

常見問題

在數學上同餘式的定義中,mod 的結果始終介於0(含)和模數(n)(不含)之間。因此 -7 mod 3 的結果是2(因為 -7 = -3×3 + 2),而不是 JavaScript 的 `%` 運算子直接返回的 -1。本工具遵循這一數學定義進行計算。

當你想在模運算的世界裡進行相當於"除法"的運算時,就需要用到模逆元。由於模運算中並未定義普通的除法,所以用乘以 a 的逆元來代替除以 a,從而得到同樣的效果。它常用於RSA金鑰生成(推導私鑰)、以及競技程式設計中要求"將答案對一個大素數取模後輸出"時涉及分數的場景。

本工具採用"平方求冪法"這一演算法,即使指數長達數百位,所需的乘法次數也只與指數的位數(準確地說是二進位制位數)成正比。與先算出完整的冪再取模的做法不同,本工具可以瞬間得出結果。

只有當 a 和 n 的最大公約數(gcd)為1(即兩者互質)時,a 模 n 的逆元才存在。例如當 a=4、n=8 時,gcd(4, 8)=4,不等於1,因此不存在滿足 4 × x ≡ 1 (mod 8) 的整數 x。如果 n 是素數,那麼只要 a 不是 n 的倍數,逆元就必然存在。

在實際使用中二者幾乎可以互換,但嚴格來說,"同餘"是一個數學概念,表示像 a ≡ b (mod n) 這樣兩個數具有相同餘數的關係;而"取模運算(mod運算)"則是指實際計算 a 除以 n 所得餘數的操作。本工具處理的正是餘數的具體計算。
ツールくん

閒話 ― 支撐現代密碼學的"時鐘算術"

模運算(同餘)常被稱為"時鐘算術(clock arithmetic)"。在12小時制的時鐘上,13點與1點被視為"相同"的時刻,這正是同餘式 13 ≡ 1 (mod 12) 本身,其核心思想是隻關注一個數被某個模(此處為12)除後所得的餘數。德國數學家卡爾·弗里德里希·高斯在1801年出版的《算術研究》(Disquisitiones Arithmeticae)一書中系統化了同餘符號"≡",使這一思想成為現代數學的標準工具。

這個看似樸素的運算,正支撐著現代網際網路安全的根基。以RSA為代表的公鑰密碼體制中,"模冪運算"——計算一個巨大數字的冪再對模取餘——是加密與解密處理的核心環節。由於指數和模數動輒長達數百位,若單純先計算出冪再取餘,計算量會呈爆炸式增長;而使用平方求冪法,只需與指數位數成正比的乘法次數即可完成,實現了實用的運算速度。

通過擴充套件歐幾里得演算法計算模逆元,同樣是密碼學、編碼理論、雜湊函式設計等電腦科學眾多領域所依賴的基礎技術。"兩千多年前的古代算術"與"最前沿的安全技術"建立在同一個數學基礎之上,這一事實正象徵著數論的普適性。