模運算計算器(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與模數之間)自動正規化,不必再為各種程式語言剩餘運算子行為不一致而煩惱。
同餘式・模運算計算器的使用方式
- 選擇模式 從「基本 mod」「加減乘運算」「冪運算」「逆元」四種模式中,選擇你想進行的計算類型。
- 輸入整數 依照所選模式輸入 a、b、模 n(或底數與指數)。負整數也可以直接輸入。
- 選擇運算子(僅限加減乘運算模式) 從下拉選單中選擇加法、減法或乘法其中一種。
- 確認計算結果 每次輸入都會自動重新計算並顯示算式與結果。若逆元不存在,畫面會切換為對應的提示訊息。
- 重新輸入 點選「清除」按鈕即可將所有模式的輸入欄位清空。
用好本工具的小技巧
- 不同程式語言對負數取模的處理方式並不相同。本工具遵循數學上的定義(結果始終在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加密演算法中加密與解密處理的核心運算,對應本工具的「冪運算」模式。
常見問題
% 運算子直接返回的 -1。本工具遵循這一數學定義進行計算。
閒話 ― 支撐現代密碼學的"時鐘算術"
模運算(同餘)常被稱為"時鐘算術(clock arithmetic)"。在12小時制的時鐘上,13點與1點被視為"相同"的時刻,這正是同餘式 13 ≡ 1 (mod 12) 本身,其核心思想是隻關注一個數被某個模(此處為12)除後所得的餘數。德國數學家卡爾·弗里德里希·高斯在1801年出版的《算術研究》(Disquisitiones Arithmeticae)一書中系統化了同餘符號"≡",使這一思想成為現代數學的標準工具。
這個看似樸素的運算,正支撐著現代網際網路安全的根基。以RSA為代表的公鑰密碼體制中,"模冪運算"——計算一個巨大數字的冪再對模取餘——是加密與解密處理的核心環節。由於指數和模數動輒長達數百位,若單純先計算出冪再取餘,計算量會呈爆炸式增長;而使用平方求冪法,只需與指數位數成正比的乘法次數即可完成,實現了實用的運算速度。
通過擴充套件歐幾里得演算法計算模逆元,同樣是密碼學、編碼理論、雜湊函式設計等電腦科學眾多領域所依賴的基礎技術。"兩千多年前的古代算術"與"最前沿的安全技術"建立在同一個數學基礎之上,這一事實正象徵著數論的普適性。