乘法逆元

定义

如果一个线性同余方程
\(ax \equiv 1 \pmod b\)
\(x\) 称为 \(a \bmod b\) 的逆元,记作 \(a^{-1}。\)

前置知识 $ax \equiv 1 \pmod b$, $\equiv $ 表示`(a * x ) % b == 1%b`

求法:

扩展欧几里得法
void exgcd(int a, int b, int& x, int& y) {
  if (b == 0) {
    x = 1, y = 0;
    return;
  }
  exgcd(b, a % b, y, x);
  y -= a / b * x;
}
前置知识
线性同余方程
定义

形如

\(ax\equiv b\pmod n\)
的方程称为 线性同余方程(Linear Congruence Equation)。其中,$a、b $和 \(n\) 为给定整数,\(x\) 为未知数。需要从区间 \([0, n-1]\) 中求解 \(x\),当解不唯一时需要求出全体解。
image

线性求逆元

求出 \(1,2,\dots,n\) 中每个数关于 p 的逆元。

如果对于每个数进行单次求解,以上两种方法就显得慢了,很有可能超时,所以下面来讲一下如何线性\((O(n))\)求逆元。

首先,很显然的 \(1^{-1} \equiv 1 \pmod p;\)
对于 \(\forall p \in \mathbf{Z},有 1 \times 1 \equiv 1 \pmod p\) 恒成立,故在 p 下 1 的逆元是 1,而这是推算出其他情况的基础。
image
实现

inv[1] = 1;
for (int i = 2; i <= n; ++i) {
  inv[i] = (long long)(p - p / i) * inv[p % i] % p;
}
posted @ 2024-07-23 15:53  Dreamers_Seve  阅读(11)  评论(0编辑  收藏  举报