模冪計算機

使用快速平方乘演算法,高效計算大整數乘方後對另一整數取模的結果。

計算乘方對 m 取模
輸入整數底數、非負指數,以及大於一的模數。

關於模冪運算

模冪運算是將整數底數提升至非負整數次方,再求除以正模數後的餘數。運算式 a^b mod m 求的是從 0 到 m - 1 之間、與 a^b 同餘的唯一餘數。即使最後的餘數很小,冪值也會迅速變得極為龐大,使直接計算變得不切實際。本計算機不必建立這個巨大的中間整數。 這種高效方法稱為二進位快速冪、反覆平方或平方乘演算法。它將指數寫成二進位並逐位處理。首先將底數對 m 取模,再於每一步將目前因子平方並對 m 取模。當對應的指數位元為一時,將該因子乘入結果,並立即再次取模。由於每個中間值都會取模,計算中的數值始終小於模數的平方。 此演算法所需步驟數僅與指數的對數成正比。因此,計算十億次方只需約三十個平方階段,而非重複十億次乘法。顯示的運算次數分別統計平方運算,以及與指數中值為一的位元對應的選定乘法。指數為零時會正確傳回 1 mod m。 模運算將餘數相同的數視為等價。例如,17 與 5 模 12 同餘,因為兩者的餘數都是 5。本工具也支援負底數,會先將其正規化為非負剩餘類代表元。此處的指數必須非負。負模指數需要求模乘法反元素,而反元素僅在底數與模數互質時存在。 模冪是數論與現代密碼學的基礎運算。RSA 加密與簽章會將訊息提升至大指數次方,再對合數取模。Diffie-Hellman 金鑰交換和許多離散對數系統使用對質數取模的冪運算。此運算也用於質數測試、偽隨機數產生器、檢查碼、週期規律及程式競賽題目。 三個輸入欄位皆以任意精度整數處理,而非浮點數。因此,即使數值超出 JavaScript 通常的安全整數範圍,仍能保留每一位數字。模數必須大於一,且輸入不得包含逗號或小數點。手動核對時,可先對底數取模,再以較小指數反覆相乘,每一步都求餘。

模冪計算範例

以下範例涵蓋簡單算術核對及常見數論規律。

運算式結果說明
3^4 mod 5181 除以 5 的餘數為 1
7^10 mod 134一個精簡的類密碼學範例
123^456 mod 789699快速冪不必產生完整冪值
2^16 mod 171費馬小定理的範例

如何計算模冪

  1. 輸入整數底數,可以是正數、零或負數。
  2. 輸入非負整數指數。
  3. 輸入大於一的整數模數。
  4. 選取「計算」,取得精確餘數與快速演算法的運算次數。

模冪常見問題

為什麼不先計算完整冪值?

完整冪值可能包含數百萬位數字,浪費時間與記憶體。每次相乘後取模可得到相同的最終餘數,同時讓中間整數保持在可處理範圍內。

什麼是平方乘演算法?

它逐位讀取指數的二進位表示,反覆對目前底數的餘數求平方。只將與值為一的位元對應的因子乘入結果。

底數可以是負數嗎?

可以,計算機會將負底數正規化為模 m 下等價的非負餘數。最終結果始終介於零與 m - 1 之間。

指數為零時會怎樣?

任何非零底數的零次方皆為一,模運算結果為 1 mod m。對於底數與指數皆為零的情況,本計算機採用相同慣例。

這個計算機能處理密碼學規模的整數嗎?

它使用任意精度整數運算,因此輸入不受一般浮點精度限制。極大的指數仍需更多運算,但二進位快速冪讓階段數維持對數級成長。