扩展欧几里得
扩展欧几里得
求解a∗x+b∗y=gcd(a,b)
时间复杂度 O(logn)
100∗x+87∗y=187∗ x2 (x+y)+13∗y2x=113∗x3(6∗x2+y2)+9∗y3x2=19∗x4(x3+y3)+4∗y4x3=14∗x5(2∗x4+y4)+y5x4=1x6(4∗x5+y5)=1此时x6=1,y6=0;
即
解ax+by=1
有(b∗⌊ba⌋+a%b)∗x+b∗y=1
b∗x’(⌊ba⌋∗x+y)+a%b∗y’x=1则a→b,b→a%b
bx′+a%b∗y′=1
x=y′,y=x′−⌊ba⌋∗y′,递归即可
求a,b
a%b=a−⌊ba⌋∗b
由归纳假设存在u',v',使得u′∗b+v′∗(a%b)=d
即u′∗b+v′(a−⌊ba⌋∗b)=d
v′∗a+(u′−⌊ba⌋∗v′)∗b=d
于是就得到了a,b的解
实际应用:
通解为
x=x0+gcd(a.b)b∗t,y=y0−gcd(a.b)a∗t
求一元二次线性方程ax+by=c的整数解
先求出ax+by=gcd(a,b)的解,然后把解乘以gcd(a,b)c就得到了原方程的解,如果gcd(a,b)c不是整数,说明原方程没有整数解(贝祖定理)
在求出特解后,通解为
x=x0+gcd(a.b)b∗t,y=y0−gcd(a.b)a∗t
若要求x的最小非负整数解
x=(x0%gcd(a.b)b+gcd(a.b)b)%gcd(a.b)b,若要求此时的y,则可以通过ax+by=gcd(a,b)来求
Last updated