求 ax1+by1=gcd(a,b)
设 bx2+(amodb)y2=gcd(b,amodb)
∴gcd(a,b)=gcd(b,amodb)
∵ax1+by1=bx2+(amodb)y2
又 ∴amodb=a−⌊ba⌋×b
∵ax1+by1=bx2+(a−⌊ba⌋×b)y2
我们利用乘法分配律,把这个式子展开
bx2+(a−⌊ba⌋×b)y2=bx2+ay2−⌊ba⌋×by2
然后,我们把 b 提出来
bx2+ay2−⌊ba⌋×by2=ay2−b(x2−⌊ba⌋×y2)
然后,我们发现 x1=y2,y1=x2−⌊ba⌋×y2
这样,代码就好写了。
int exgcd(int a,int b,int &x,int &y){
if(!b){
x=1;
y=0;
return a;
}
int d=exgcd(b,a%b,x,y);
int t=x;
x=y;
y=t-a/b*y;
return d;
}