[数论] 求逆元

逆元

•何为逆元

方程ax≡1(mod  p),的解称为a关于模p的逆,当gcd(a,p)==1(即a,p互质)时,方程有唯一解,否则无解。

逆元有对称性,x是a关于b的逆元,那a也是x关于b的逆元。

线性递推求逆元

线性求从1到n的$mod p$ 的逆元

设$p=ki+r (r<i<p,i>1)$  ①

可以得到

$k=lfloor frac{p}{i} floor$  ②

$r=p mod i$  ③

$ki+requiv 0 (mod p)$  ④

两边同乘$i^{-1}cdot r^{-1}$得

$kr^{-1}cdot i^{-1}equiv 0 (mod p)$

移项得$i^{-1}equiv -kr^{-1} (mod p)$  ⑤

将②③代入⑤

得 $i^{-1}equiv -lfloor frac{p}{i} floorcdot (p mod i)^{-1}(mod p)$

由于$1^{-1}equiv 1 (mod p)$

所以1到n $mod p$逆元就可以线性递推出来了

•代码

1 inv[1]=1;
2 for(int i=2;i<=n;i++)
3     inv[i]=-(p/i)*inv[p%i];
线性求逆元

扩展欧几里得求逆元

•先行知识:扩展欧几里得

exgcd求的是 $ax+by=gcd(a,b)$  的一组解

1)首先看当b==0,也就是$gcd(a,b)=gcd(a,0)=a$时

$ax+by=a$

得$x=1$

2)我们设

$ax_{1}+by_{1}=gcd(a,b) $ ①

$bx_{2}+(a$%$b)y_{2}=gcd(b,a$%$b)$ ②

由于 $gcd(a,b)=gcd(b,a$%$b)$ 

所以①②左边相等

$ax_{1}+by_{1}=bx_{2}+(a$%$b)y_{2}$

$ax_{1}+by_{1}=(a-lfloor frac{a}{b} floorcdot b)y_{2}$

$ax_{1}+by_{1}=ay_{2}+(x_{2}-lfloor frac{a}{b} floorcdot y2)b$

 得到

$x_{1}=y_{2}$

$y_{1}=x_{2}-lfloor frac{a}{b} floor cdot y_{2}$

也就是说我们根据x2,y2便可推导出x1,y1的值,只要将a,b换成b,a%b即可,和gcd算法类似这是一个递归的过程

既然是递归,那我们就要找一个出口,恰好①情况,当b变为0时,我们就可以退出了。

当a,b互质也就是 $gcd(a,b)=1$时

$ax+by=gcd(a,b)=1$

即为$ax=1-by$

所以$ax (mod b)equiv (1-by)(mod b)equiv1(mod b)$

所以$axequiv1(mod b)$,x为$a mod b$的逆元

同理可得y为$b mod a$的逆元

•代码

 1 ll exgcd(ll a,ll b,ll &x,ll &y)
 2 {
 3     if(b==0)
 4     {
 5         x=1,y=0;
 6         return a;
 7     }
 8     ll r=exgcd(b,a%b,y,x),temp;
 9     y -= (a/b)*x;
10 
11     return r;
12 }
13 
14 ll inv(ll a,ll b)
15 {
16     ll r=exgcd(a,b,x,y);
17     while(x<0)
18         x+=b;
19     return x;
20 }
exgcd求逆元

费马小定理求逆元

•先行知识:费马小定理

假如p是质数,且gcd(a,p)=1,那么 $a^{p-1}≡1(mod p)$,

即:假如a是整数,p是质数,且a,p互质,那么a的(p-1)次方除以p的余数恒等于1。

费马小定理求逆元的先行条件是p是素数

$a^{p-1}equiv 1(mod p)$

即 $acdot a^{p-2}equiv 1(mod p)$

所以a关于p的逆元就是 $a^{p-2}$

一般利用快速幂求解

•代码

 1 ll qpow(ll a,ll b,ll p)
 2 {
 3     ll res=1;
 4     while(b)
 5     {
 6         if(b&1)
 7             res=res*a%p;
 8         a=a*a%p;
 9         b>>=1;
10     }
11     return res;
12 }
13 ll inv=qpow(a,p-2,p);
费马小定理求逆元
原文地址:https://www.cnblogs.com/MMMinoz/p/11384877.html