--- title: Notes on Multiplicative Inverse tags: - GCD-LCM - Multiplicative Inverse - Note id: "915" categories: - - OI - Number Theory date: 2017-07-01 18:20:58 --- ### 扩展欧几里得算法求$a$对模$b$的逆 当$(a, b)=1$时,有 $$ \exists x, y \in Z, \; ax+by=1 $$ 扩展欧几里得算法证明如下: > 设$a \gt b$。 > > 当$b=0$时,有 > > $$ > a \times 1+b \times 0=a=(a, b)=1 > $$ > > 此时$x=1, \; y=0$。 > > 当$b \neq 0$时,有 > > $$ > \left\\{ > \begin{align} > a \times x_1+b \times y_1&=1 \\\\ > b \times x_2+a \bmod b \times y_2&=1 > \end{align} > \right. > $$ > > 所以 > > $$ > a \times x_1+b \times y_1=b \times x_2+a \bmod b \times y_2 > $$ > > 将$a \bmod b=a-a/b \times b$代入,得 > > $$ > a \times x_1+b \times y_1=b \times x_2+a \times y_2-a/b \times b \times y_2 > $$ > > 那么$x_1=y_2, \; y_1=x_2-a/b \times y_2$。 由此得证。 ```cpp void extend_gcd(int a, int b, int &x, int &y) { if (!b) { x = 1, y = 0; return; } int ret = extend_gcd(b, a % b, y, x); y -= a / b * x; } ``` --- ### 费马小定理求$a$对模$p$的逆 当$p$是质数且$p \nmid x$时,有 $$ x^{-1} \equiv x^{p-2} \pmod p $$ 证明如下: > 根据费马小定理,当$p$是质数时,有 > > $$ > \forall x \in Z, \; x^p \equiv x \pmod p > $$ > > 当$p \nmid x$时,有 > > $$ > \begin{align} > x^{p-1} &\equiv 1 \pmod p \\\\ > x^{-1} &\equiv x^{p-2} \pmod p > \end{align} > $$ 由此得证。 --- ### $O(n)$时间求出$1..n$对模$p$的逆 当$p$是质数且$1 \lt i \lt p$时,有 $$ i^{-1} \equiv (p-p/i) \times (p \bmod i)^{-1} \pmod p $$ 证明如下: > 令$t=p/i, \; k=p \bmod i$。易知 > > $$ > \begin{align} > t \times i+k &\equiv 0 \pmod p \\\\ > k &\equiv -t \times i \pmod p > \end{align} > $$ > > 等式两边同时除以$ik$,得 > > $$ > \begin{align} > i^{-1} &\equiv -t \times k^{-1} \pmod p \\\\ > i^{-1} &\equiv -p/i \times (p \bmod i)^{-1} \pmod p > \end{align} > $$ > > 即 > > $$ > i^{-1} \equiv (p-p/i) \times (p \bmod i)^{-1} \pmod p > $$ 由此得证。 ```cpp void get_inv() { inv[1] = 1; for (int i = 2; i < MOD; ++i) { inv[i] = inv[MOD % i] * (MOD - MOD / i) % MOD; } } ``` --- ### 求$b \mid a$时${a \over b}$在模$n$意义下的值 当$b \mid a$时,有 $$ {a \over b} \bmod n=a \bmod (bn) / b $$ 证明如下: > 设 > > $$ > {a \over b} \bmod n = x > $$ > > 则有 > > $$ > \begin{align} > {a \over b}&=kn+x \\\\ > a&=kbn+bx > \end{align} > $$ > > 因为$0 \le x \lt n$,所以 > > $$ > \begin{align} > a \bmod (bn)&=bx \\\\ > x&=a \bmod (bn) / b > \end{align} > $$ 由此得证。