//找到(ax+by==gcd(a,b)的一组解
void gcd(int a,int b, int&d, int& x, int& y){ //d 返回最大公约数 if(!b){ d=a; x=1; y=0; } else { gcd(b,a%b,d,y,x); y-=x*(a/b); } }
注意以下结论:
ax+by=c的一组整数解为x y,则他的任意整数解可以写成(x+kb',y-ka') b'=b/gcd(a,b) a'=gcd(a,b)
ax+by=c 若c 不是gcd(a,b)的整数倍则无整数解
递归的最后得到如下式子 gcd(a,b)*1+0*y=gcd(a,b)