免费乘法逆模计算器

am

输入a和m,然后点击计算

介绍乘法逆模计算器

在数论以及密码学、随机数生成和编程竞赛等实际应用中,经常需要求模逆(模乘法逆元)。逆模计算器自动完成此任务:对于给定的底数aa和模数mm,确定整数xx使得a×x≡1(modm)a \times x \equiv 1 \pmod{m}。这一免费在线模逆查找器在底层使用扩展欧几里得算法,即使mm很大也能在毫秒级给出答案。

计算器的界面简单直观。您提供模数mm(正整数)和整数aa,工具计算gcd⁡(a,m)\gcd(a, m)。如果最大公约数为1,则返回区间{1,2,…,m−1}\{1, 2, \dots, m-1\}内的唯一逆元;否则报告不存在逆元。该行为基于下文解释的数学条件。

什么是模逆?

正式地,如果整数xx满足

a×x≡1(modm).a \times x \equiv 1 \pmod{m}.

则称xx为aa模mm的模逆。另一种表述是:a×xa \times x除以mm的余数必须恰好为11。例如,考虑a=3a = 3和m=7m = 7;逆元是55,因为3×5=153 \times 5 = 15且15 mod 7=115 \bmod 7 = 1。

任何解xx都可以加上mm的整数倍:如果xx是一个逆元,则x+kmx + k m(对任意整数kk)也满足同余式。因此计算器返回集合{1,2,…,m−1}\{1, 2, \dots, m-1\}中的规范代表,该集合内逆元是唯一的。

逆元何时存在?

模逆的存在完全取决于aa与mm的关系:

  • 存在逆元当且仅当gcd⁡(a,m)=1\gcd(a, m) = 1,即aa与mm互质(互素)。
  • 不存在逆元当gcd⁡(a,m)>1\gcd(a, m) > 1。

当mm为素数时,每个不为mm倍数的非零整数aa自动满足gcd⁡(a,m)=1\gcd(a, m) = 1,因此都有逆元。对于合数模,一个简单例子可以说明不成立:取a=3a = 3和m=6m = 6。由于gcd⁡(3,6)=3\gcd(3, 6) = 3,没有整数xx能使3x≡1(mod6)3x \equiv 1 \pmod{6}。检查x=1,2,3,4,5x = 1, 2, 3, 4, 5对应的余数3,0,3,0,33, 0, 3, 0, 3,确认永远不会出现11。

如何使用模逆计算器

步骤非常简单:

  1. 输入模数 mm(正整数)。
  2. 输入整数 aa。
  3. 点击计算按钮。

工具首先计算 gcd⁡(a,m)\gcd(a, m)。如果最大公约数为1,则运行扩展欧几里得算法求逆元,并显示结果以及步骤的简要说明。如果两数不互质,计算器会告知逆元不存在。

由于算法运行时间为 O(log⁡m)O(\log m),即使模数有几十位数字,也能几乎瞬间处理完毕。

贝祖等式与扩展欧几里得算法

计算模逆最有效的方法是扩展欧几里得算法。该算法求解贝祖等式:

ax+my=gcd⁡(a,m).a x + m y = \gcd(a, m).

当aa与mm互质时,gcd⁡(a,m)=1\gcd(a, m) = 1,等式变为

ax+my=1.a x + m y = 1.

将整个方程对mm取模,消去mym y项(它是mm的倍数),得到

ax≡1(modm).a x \equiv 1 \pmod{m}.

因此算法得到的系数xx正是模逆。

一个示例

求 77 模 1919 的逆元。应用扩展欧几里得算法:

19=2×7+5,19 = 2 \times 7 + 5, 7=1×5+2,7 = 1 \times 5 + 2, 5=2×2+1.5 = 2 \times 2 + 1.

回代得到 1=3×19−8×71 = 3 \times 19 - 8 \times 7。模 1919 化简得 −8×7≡1(mod19)-8 \times 7 \equiv 1 \pmod{19};将负系数加上 1919 转化为正余数,得到 1111。因此 1111 是逆元,因为 7×11=77≡1(mod19)7 \times 11 = 77 \equiv 1 \pmod{19}。

小模数的暴力枚举方法

如果模数很小,可以通过尝试法求逆元:测试每个整数 x=1,2,…,m−1x = 1, 2, \dots, m-1 直到 ax mod m=1a x \bmod m = 1。虽然暴力方法容易理解,但当 mm 增大时变得不可行,这就是专业工具和编程库都采用扩展欧几里得算法的原因。

为什么模逆很重要

快速计算模逆的能力在多个领域至关重要:

  • 密码学:在 RSA 中,解密指数 dd 是加密指数 ee 模 ϕ(n)\phi(n) 的模逆。
  • 编程:许多竞赛编程问题和库需要模除法,而模除法是通过乘以逆元来实现的。
  • 数学:求解线性同余方程以及构造有限域都依赖于逆元的存在和高效计算。

常见问题

1. 如何手动计算模乘法逆元?

对于小模数,测试每个 x 从 1 到 m−1 直到 a·x mod m = 1。对于大模数,使用扩展欧几里得算法:它找到整数 x 和 y 使得 a·x + m·y = gcd(a,m);当 gcd=1 时,x 就是逆元。

2. 模逆存在需要满足什么条件?

逆元存在仅当 a 和 m 互质,即 gcd(a,m) = 1。如果它们有任何大于 1 的公因子,则不存在整数 x 满足 a·x ≡ 1 (mod m)。

3. 模乘法逆元是唯一的吗?

逆元在模 m 意义下是唯一的:如果 x 是一个解,那么 x + k·m(k 为任意整数)也是逆元。不过,计算器返回集合 {1, 2, …, m−1} 中的唯一值。

4. 为什么计算器偏好使用扩展欧几里得算法而不是暴力法?

扩展欧几里得算法的时间复杂度为 O(log m),在 m 很大时远比暴力法快。它同时检查逆元是否存在,并通过求解贝祖等式来计算逆元。

5. 如果我输入不互质的数字会怎样?

计算器会计算 gcd(a,m),如果大于 1,则报告该对数字不存在模乘法逆元。

使用方法

  1. 输入要求其乘法逆元的整数 a。
  2. 输入模数 m。仅当 a 和 m 互质(gcd=1)时,逆元存在。
  3. 点击计算,求满足 (a × x) mod m = 1 的模逆 x。