int extend_Euclid(int a, int b, int &x, int &y)
{
if(b==0)
{
x = 1;
y = 0;
return a;
}
int r = extend_Euclid(b, a%b, y, x);
y -= a/b*x; //这里已经是递归,回溯的过程了,x,y已经颠倒了
return r;
}
以上是求 a*x +b*y == gcd(a,b)某一组特解X1,Y1的过程
所以a*x + b*y == gcd(a,b)的通解为 X = X1 - b/gcd(a,b)*t
Y = Y1 + a/gcd(a,b)*t t为任意整数。