数论之逆元

在数学和计算机科学中,逆元是一个非常重要的概念,尤其在数论和密码学中应用广泛。简单来说,逆元就像是乘法中的倒数,但它是在特定运算和模数下的“倒数”。

什么是逆元?

在一个给定的模数 \(m\) 下,如果存在一个数 \(x\),使得数 \(a\)\(x\) 相乘后对 \(m\) 取模的结果为 1,那么 \(x\) 就被称为 \(a\)模乘法逆元(Modular Multiplicative Inverse)。

用数学公式表示就是:

如果 \(ax \equiv 1 \pmod{m}\)
那么 \(x\) 就是 \(a\) 在模 \(m\) 意义下的逆元。

这里:

  • \(a\)\(m\) 必须是互质的(即它们的最大公约数是 1),否则 \(a\) 的逆元不存在。
  • \(x\) 的值通常在 \(1\)\(m-1\) 的范围内。

为什么要用逆元?

在模运算中,加法、减法和乘法都有对应的规则,但除法却没有。当我们需要在模运算中进行除法时,就需要用到逆元。

比如,我们想计算 \((b / a) \pmod{m}\)
由于模运算不直接支持除法,我们可以将除以 \(a\) 转化为乘以 \(a\) 的逆元 \(x\)
所以,\((b / a) \pmod{m}\) 就可以转换为 \((b \cdot x) \pmod{m}\)


如何求逆元?

求逆元主要有以下几种方法:

  1. 扩展欧几里得算法(Extended Euclidean Algorithm)
    这是最通用也最常用的方法。它基于欧几里得算法(求最大公约数),可以用来解方程 \(ax + by = \text{gcd}(a, b)\)。当 \(a\)\(m\) 互质时,\(\text{gcd}(a, m) = 1\),方程就变成了 \(ax + my = 1\)。对这个方程取模 \(m\),我们得到 \(ax \equiv 1 \pmod{m}\),从而求出 \(x\)

  2. 费马小定理(Fermat's Little Theorem)
    如果模数 \(m\) 是一个质数,我们可以用费马小定理来求逆元。
    费马小定理指出,如果 \(p\) 是质数,且 \(a\) 不是 \(p\) 的倍数,那么 \(a^{p-1} \equiv 1 \pmod{p}\)
    这个公式可以写成 \(a \cdot a^{p-2} \equiv 1 \pmod{p}\)
    因此,当 \(m\) 是质数时,\(a\) 的逆元就是 \(a^{m-2} \pmod{m}\)。这种方法通常用快速幂算法来计算。

  3. 线性递推
    如果需要求一组连续数字(例如 \(1, 2, \dots, n\))在模 \(p\) 意义下的逆元,并且 \(p\) 是一个质数,我们可以用线性时间复杂度递推出所有逆元。


简单例子

让我们用一个例子来理解逆元。
\(3\) 在模 \(7\) 意义下的逆元。

我们设逆元为 \(x\),根据定义,\(3x \equiv 1 \pmod{7}\)
我们可以逐一测试 \(x\) 的值(从 \(1\)\(6\)):

  • \(3 \cdot 1 = 3 \not\equiv 1 \pmod{7}\)
  • \(3 \cdot 2 = 6 \not\equiv 1 \pmod{7}\)
  • \(3 \cdot 3 = 9 \equiv 2 \pmod{7}\)
  • \(3 \cdot 4 = 12 \equiv 5 \pmod{7}\)
  • \(3 \cdot 5 = 15 \equiv 1 \pmod{7}\)

\(x=5\) 时,我们找到了满足条件的数。因此,\(3\) 在模 \(7\) 意义下的逆元是 \(5\)

有了这个逆元,我们就可以在模 \(7\) 意义下进行“除法”了。比如,计算 \((6/3) \pmod{7}\),我们可以写成 \((6 \cdot 5) \pmod{7}\),结果为 \(30 \pmod{7} \equiv 2 \pmod{7}\)
而直接计算 \(6/3 = 2\),结果是吻合的。

posted @ 2025-08-23 17:23  立体风  阅读(112)  评论(0)    收藏  举报