模運算計算器(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(逆元)。

什麼是同餘式・模運算(mod計算)

模運算(同餘式運算)是一種只關注某個數除以特定正整數(稱為模數)後所得餘數的運算方式。當兩個整數 a、b 除以同一個模數 n 得到相同的餘數時,就稱「a 與 b 對模 n 同餘」,並記作 a ≡ b (mod n)。本工具提供「基本 mod」「加減乘運算」「冪運算」「逆元」四種模式,讓你能一次完成同餘式運算中最常用的各種計算。

所有計算都是以 JavaScript 原生的 BigInt 進行,因此即使指數多達數百位,或整數本身位數極大,加減乘運算依然不會產生四捨五入誤差,能得到精確的結果。輸入負數時,本工具也會依照數學上同餘式的定義(結果一律介於0與模數之間)自動正規化,不必再為各種程式語言剩餘運算子行為不一致而煩惱。

同餘式・模運算計算器的使用方式

  1. 選擇模式 從「基本 mod」「加減乘運算」「冪運算」「逆元」四種模式中,選擇你想進行的計算類型。
  2. 輸入整數 依照所選模式輸入 a、b、模 n(或底數與指數)。負整數也可以直接輸入。
  3. 選擇運算子(僅限加減乘運算模式) 從下拉選單中選擇加法、減法或乘法其中一種。
  4. 確認計算結果 每次輸入都會自動重新計算並顯示算式與結果。若逆元不存在,畫面會切換為對應的提示訊息。
  5. 重新輸入 點選「清除」按鈕即可將所有模式的輸入欄位清空。

用好本工具的小技巧

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

同餘式・模運算的應用場景

學習公開金鑰加密演算法

RSA加密的加密與解密過程,本質上就是計算一個極大的數的冪對模數取餘。在冪運算模式中輸入較大的指數與模數,就能實際感受到平方求冪法的運算速度。

理解雜湊函式的設計原理

許多雜湊函式內部都會利用模運算,將龐大的數值收斂到固定範圍內。透過加減乘運算模式,可以觀察運算過程中餘數如何逐步變化。

驗證檢查碼的計算方式

ISBN、信用卡卡號、銀行帳號等常見的檢查碼,都是將各位數加權求和後對某個模數取餘計算出來的。用基本 mod 模式即可核對手算結果是否正確。

計算星期與日曆的週期

「n天後是星期幾」「閏年是幾年一個週期」這類具有週期性的問題,都可以表示成以7或4為模數的同餘式。

核對競技程式設計的答案

在「請將答案對 1,000,000,007 取餘後輸出」這類常見題型中,可以利用冪運算模式與加減乘運算模式,核對自己程式的計算結果是否正確。

同餘式・模運算相關術語

同餘式(congruence)
形如 a ≡ b (mod n) 的式子,表示「a 與 b 除以 n 的餘數相等」。之所以用「≡」而不是「=」,是因為相等的並非數值本身,而是餘數。
模數
作為除數的整數。本工具要求輸入1以上的整數。模數不同,即使是同一組數字,同餘關係也會不一樣。
模運算
實際計算某數除以模數後所得餘數的操作。依照數學定義,結果一律介於0(含)與模數(不含)之間。
模反元素
滿足 a・x ≡ 1 (mod n) 的整數 x,也稱為模逆元。在同餘式的世界裡,用「乘上 a 的模反元素」來取代「除以 a」,即可得到相同的效果。
互質
兩個整數的最大公因數為1。唯有 a 與 n 互質時,a 對模 n 的模反元素才存在。
擴充歐幾里得演算法
在求最大公因數的過程中,同時求出滿足 a・x + n・y = gcd(a, n) 的整數解 (x, y) 的演算法。逆元模式的計算即採用此方法。
快速冪(平方求冪法)
將指數展開為二進位表示,透過反覆將底數平方並視位元決定是否乘入結果,只需與指數位數成正比的乘法次數即可求出冪的演算法。冪運算模式即採用此方法。
模冪運算
計算底數的冪對模數取餘的運算。這是RSA加密演算法中加密與解密處理的核心運算,對應本工具的「冪運算」模式。

常見問題

在數學上同餘式的定義中,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為代表的公鑰密碼體制中,"模冪運算"——計算一個巨大數字的冪再對模取餘——是加密與解密處理的核心環節。由於指數和模數動輒長達數百位,若單純先計算出冪再取餘,計算量會呈爆炸式增長;而使用平方求冪法,只需與指數位數成正比的乘法次數即可完成,實現了實用的運算速度。

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