exGCD / exCRT

exgcd
求解形如
ax+by=kgcd(a,b)
我们先来解决一个简单一些的问题
ax+by=1 (ab)
根据exgcd,我们能求出来一组特解x0,y0,接下来,我们尝试构造其通解
a(x0+Δx)+b(y0+Δy)=1
ax0+by0=1 (ab) 相减,得
aΔx+bΔy=0
Δx=bΔya
由于Δx是整数,所以 abΔy,又因为ab所以aΔy
同理可得bΔx
Δx=kb
则有Δy=aΔxb=akbb=ka
因此,通解为
x=x0+kb
y=y0ka
这意味着:
1.已经在构造中证明,该形式是方程的一个解
2.因为我们是对全体Δx,Δy推导方程的解一定满足该形式
我们均已经在上文证明
接下来,我们希望求解
ax+by=k(a,b)
在方程两边同时除以k(a,b)
a=ak(a,b),b=bk(a,b)
转化为
ax+by=1
通解为
x=x0+kb=x0+kb(a,b)
y=y0ka=y0kb(a,b)

exCRT
我们合并方程组

{xr1modm1xr2modm2


x=m1k1+r1=m2k2+r2
整理
m1k1m2k2=r2r1
c=r2r1
方程两边同时除以c
p1k1p2k2=1
有解仅当
通解为
k1=k1+lp2
k2=k2lp1
回代,得
x=m1k1+lm1p2
x=m1k1+l[m1,m2]
xm1k1(modlcm(m1,m2))
每一步都不失唯一性和成立性

作者:cdsidi

出处:https://www.cnblogs.com/cdsidi/p/16584849.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   CDsidi  阅读(67)  评论(5编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂
· 凌晨三点救火实录:Java内存泄漏的七个神坑,你至少踩过三个!
点击右上角即可分享
微信分享提示
more_horiz
keyboard_arrow_up dark_mode palette
选择主题