关于扩展欧几里得的一些想法

仅代表个人观点,如有雷同,一定是他抄我的。如有错误,那一定是你rp不好
  —— 我

  这次的博客是关于用扩展欧几里得求逆元的一些小技巧的感想。

推导扩展欧几里得的过程

f=gcd(a,b)
f=ax+by
f=gcd(a,b)=gcd(b,amodb)

f=bx+amodby=bx+(a(a/b)b)y/=bx+aya/bby=ay+b(xa/by)
对比上下两式可得
x=y
y=(xa/b)
到目前为止,推导差不多结束。
但是,发现x’和y’是当前状态的下一个状态,所以我们需要从结果反推。

由欧几里得推出,最终结果的状态为: a=f,b=0
将结果代入 ax+by=f 可得 x=1,y=0

于是可以递归反推当前 x,y ,得到同余方程的一组解。
至于通解,不详细证明。

x , y 是一组特殊解,则通解为:
x=x+tb/f
y=yta/f

扩展欧几里得的作用

扩欧的作用之一就是求逆元。
逆元定义为:当满足 a×x=1(modp) 时,x为a在mod p下的逆元。
如何求这个逆元呢?这是个同余方程,可以用扩欧。
上面的条件等价于 ax+py=1
于是我们就能用扩欧求出一组x,y,的解。

线性扩欧

这才是重点好吧。
注:不是线性求一个,而是线性求连续一段 1到n所有数的逆元。
设p=ki+r (i>r)
ki+r0(modp)
kr1+i10(modp)
i1ki1(modp)
i1pi×(pmodi)1(modp)

推导到这一步,整个式子就是只跟i和p有关了。
其中, i1 是i的逆元,这个式子就是一个递推式了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值