模运算计算器
基于 BigInt 的模运算:快速幂 a^b mod m、扩展欧几里得求模逆元、中国剩余定理(模数可互质也可不互质)、欧拉 φ 函数、最大公约数与最小公倍数、小范围离散对数。
浏览器本地运行所有计算都在你的浏览器里完成,数据不会离开本机。
输入
全部计算使用 BigInt,几十位的整数也不会丢精度;# 开头的行会被当成注释忽略。
结果
24
101000这个工具能做什么
- 写 RSA 或椭圆曲线练习时算快速幂:a^b mod m 用平方-乘算法,几十位的大数也不会丢精度。
- 解同余方程组:把「2, 3 / 3, 5 / 2, 7」这样的条件填进去,直接得到 x ≡ 23 (mod 105),模数不互质也能处理。
- 求模逆元做除法:模运算里没有除法,先算出 a⁻¹ 再乘,工具会顺手给出 a·x mod m 的校验结果。
- 数论作业里的欧拉 φ、最大公约数、最小公倍数、小范围离散对数都在同一个页面,不用来回切换工具。
示例
输入
同余式组:2, 3 / 3, 5 / 2, 7(即 x ≡ 2 (mod 3)、x ≡ 3 (mod 5)、x ≡ 2 (mod 7))
输出
x ≡ 23 (mod 105);同余解 x = 23,解模数 M = 105,逐条校验 23 ≡ 2 (mod 3);23 ≡ 3 (mod 5);23 ≡ 2 (mod 7)
每行写一条「余数, 模数」;模数不必互质,条件互相矛盾时会明确提示无解,而不是硬给一个错误答案。
常见问题
为什么模运算里没有「除法」?
因为在模 m 下只有与 m 互质的数才有乘法逆元:a 的逆元 x 满足 a·x ≡ 1 (mod m),存在当且仅当 gcd(a, m) = 1。所以工具用扩展欧几里得求逆元,不互质时直接报「模逆元不存在」,不会返回一个错的数。
快速幂和直接乘很多次有什么区别?
快速幂把指数按二进制拆开,每次把底数平方,复杂度是 O(log b);b 有几百位时直接乘要算 2^b 次,根本跑不完。单测里也用朴素幂对拍过,两者的结果完全一致。
中国剩余定理要求模数互质吗?
经典版本要求两两互质,这里实现的是通用版本:合并两条同余式时先算 gcd,能整除就有解,否则报「无解」。所以 x ≡ 1 (mod 4)、x ≡ 3 (mod 6) 也能得到 9 (mod 12)。
离散对数能算多大的范围?
用的是暴力枚举,默认最多尝试 100 万步,适合模数在几百万以内的小规模题目。范围更大的离散对数需要 BSGS(大步小步)之类的算法,本工具不做,超出步数上限会提示无解。
大整数会不会丢精度?
不会。所有运算都用 BigInt 完成,不经过 Number,所以 2^100 这类远超 2^53 的值也是精确的。欧拉 φ 需要分解质因数,试除法上限是 10^12,超过会提示而不是给出错误结果。
关键词:modular arithmetic模运算modular exponentiation快速幂modular inverse模逆元chinese remainder theorem中国剩余定理euler phi欧拉函数discrete log离散对数bigintgcd lcm