[数论] 求逆元

逆元

•何为逆元

方程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} \rfloor$  ②

$r=p \ mod \ i$  ③

$ki+r\equiv 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} \rfloor\cdot (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} \rfloor\cdot b)y_{2}$

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

 得到

$x_{1}=y_{2}$

$y_{1}=x_{2}-\lfloor \frac{a}{b} \rfloor \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)$

所以$ax\equiv1(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)$

即 $a\cdot 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);
费马小定理求逆元
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值