求 (ax_1+by_1=gcd(a,b))
设 (bx_2+(amod b)y_2=gcd(b,a mod b))
( herefore gcd(a,b)=gcd(b,a mod b))
(ecause ax_1+by_1=bx_2+(amod b)y_2)
又 ( herefore a mod b=a-lfloorfrac{a}{b} floor imes b)
(ecause ax_1+by_1=bx_2+(a-lfloorfrac{a}{b} floor imes b)y_2)
我们利用乘法分配律,把这个式子展开
(bx_2+(a-lfloorfrac{a}{b} floor imes b)y_2=bx_2+ay_2-lfloorfrac{a}{b} floor imes by_2)
然后,我们把 (b) 提出来
(bx_2+ay_2-lfloorfrac{a}{b} floor imes by_2=ay_2-b(x_2-lfloorfrac{a}{b} floor imes y_2))
然后,我们发现 (x_1=y_2,y_1=x_2-lfloorfrac{a}{b} floor imes y_2)
这样,代码就好写了。
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;
}