模幂计算器

使用快速平方乘算法,高效计算大整数乘方后对另一整数取模的结果。

计算乘方对 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。对于底数和指数都为零的情况,本计算器采用相同约定。

此计算器能处理密码学规模的整数吗?

它使用任意精度整数运算,因此输入不受普通浮点精度限制。极大的指数仍需更多计算,但二进制快速幂使阶段数保持对数级增长。