//找到(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)