a*x+b*y=d,d=gcd(a,b).
-----取自小白
详见算导(第二版)528;具体数学86。
a*(x1-x2)=b*(y2-y1) ------>
a/d*(x1-x2)=b/d*(y2-y1) --------------->
a/d,b/d互质 -------------->
x1-x2=k*(b/d),y2-y1=k*(a/d) --------------->
x=x0+b/d*k,y=y0-a/d*k,k为任意整数。
模板代码:
void exgcd(int a,int b,int& d,LL &x,LL &y){
if(b==0){
d=a;
x=1;y=0;
return;
}
exgcd(b,a%b,d,y,x);
y-=a/b*x;
}
-----取自小白
- 算法推导及证明:
设,当
时,
,此时
,否则设
由于,所以进一步得到
所以得到
详见算导(第二版)528;具体数学86。
- 其它解:
a*(x1-x2)=b*(y2-y1) ------>
a/d*(x1-x2)=b/d*(y2-y1) --------------->
a/d,b/d互质 -------------->
x1-x2=k*(b/d),y2-y1=k*(a/d) --------------->
x=x0+b/d*k,y=y0-a/d*k,k为任意整数。
- 性质:
- a*b!=0,|x|<=b且|y|<=a。
- 与扩展GCD有关的算法:
- 中国剩余定理
- 相关的题目:
- poj1061,2115。
- poj2142
- hoj2815
- uva10673