扩展欧几里得
1. 扩展欧几里得
用于求解方程 ax+by=gcd(a,b)ax+by=gcd(a,b) 的解
当 b=0b=0 时 ax+by=aax+by=a 故而 x=1,y=0x=1,y=0
当 b≠0b≠0 时
因为
gcd(a,b)=gcd(b,a%b)
gcd(a,b)=gcd(b,a%b)
而
bx′+(a%b)y′=gcd(b,a%b)
bx′+(a%b)y′=gcd(b,a%b)
bx′+(a−⌊a/b⌋∗b)y′=gcd(b,a%b)
bx′+(a−⌊a/b⌋∗b)y′=gcd(b,a%b)
ay′+b(x′−⌊a/b⌋∗y′)=gcd(b,a%b)=gcd(a,b)
ay′+b(x′−⌊a/b⌋∗y′)=gcd(b,a%b)=gcd(a,b)
故而
x=y′,y=x′−⌊a/b⌋∗y′
x=y′,y=x′−⌊a/b⌋∗y′
因此可以采取递归算法 先求出下一层的x′x′和y′y′ 再利用上述公式回代即可
2. 对于更一般的方程 ax+by=cax+by=c
设 d=gcd(a,b)d=gcd(a,b) 则其有解当且仅当 d|cd|c
求解方法如下:
用扩展欧几里得求出 ax0+by0=dax0+by0=d 的解
则a(x0∗c/d)+b(y0∗c/d)=ca(x0∗c/d)+b(y0∗c/d)=c
故而特解为 x′=x0∗c/d,y′=y0∗c/dx′=x0∗c/d,y′=y0∗c/d
而通解 = 特解 + 齐次解
而齐次解即为方程 ax+by=0ax+by=0的解
故而通解为 x=x′+k∗b/d,x=y′−k∗a/dk∈z
求 x最小正整数解 (x%(b/d)+b/d)%( b/d)
作者:ZeroAC
链接:https://www.acwing.com/solution/content/1393/
来源:AcWing
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

浙公网安备 33010602011771号