什么是模幂运算?
模幂运算就是计算 \(a^b \bmod m\),也就是幂 \(a^b\) 除以模数 m 之后所得的余数。它是数论和密码学中最重要的运算之一,支撑着 RSA、Diffie–Hellman 密钥交换以及数字签名等众多算法。即便 \(a^b\) 大到天文数字,对 m 取模后的结果依然很小,完全可以计算出来。
如何使用本计算器
请输入三个整数:底数 a、非负指数 b,以及模数 m(一个正整数)。点击计算,即可得到唯一的余数,其取值范围在 0 到 m−1 之间。底数可以为负数;在进行幂运算之前,程序会先把它规范化到合法的余数区间内。
公式详解
当 b 很大时,直接计算 \(a^b\) 是不现实的,因此本工具采用平方-乘算法(也称快速幂或二进制取幂)。算法将指数按二进制逐位读取:先令结果 \(r = 1\),并把底数对 m 取模;对于指数的每一个二进制位,都将底数自乘平方(对 m 取模);每当当前位为 1 时,就把结果乘以底数(对 m 取模)。这样只需大约 \(\log_2(b)\) 次乘法,而不必做 b 次乘法。
实例演算
计算 \(4^{13} \bmod 497\)。指数 13 的二进制为 1101。按平方-乘法逐步推算: $$4^1 = 4, \quad 4^2 = 16, \quad 4^4 = 256, \quad 4^8 = 256^2 = 65536 \equiv 30 \pmod{497}.$$ 由于 \(13 = 8 + 4 + 1\),将对应的几个幂相乘: $$30 \times 256 \times 4 = 30720 \equiv 445 \pmod{497}.$$ 所以 \(4^{13} \bmod 497 = \mathbf{445}\)。
常见问题
如果指数是 0 怎么办? 任何数的 0 次方都等于 1,所以结果为 \(1 \bmod m\)(当 \(m = 1\) 时结果为 0)。
底数可以是负数吗? 可以。程序会先把负底数转换为其在 mod m 下等价的正余数,因此答案始终落在 0 到 m−1 之间。
为什么不直接算出 a^b 再取模? 在密码学应用的数量级下,\(a^b\) 会有上百万位数字。每一步都对 m 取模,能把数值始终保持得很小,从而让运算又快又稳。