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
本文详细介绍了扩展欧几里得算法的原理及其应用,包括算法的模板代码、推导过程、证明方法以及如何求解更一般的线性方程组。此外,还列举了一些与该算法相关的典型题目。
384

被折叠的 条评论
为什么被折叠?



