// 扩展欧几里得算法(递归)
int exgcd(int a, int b, int &x, int &y)
{
if (a % b == 0) {
x = 0;
y = 1;
return b;
}else {
int r, tx, ty;
r = exgcd(b, a % b, tx, ty);
x = ty;
y = tx - a / b * ty;
return r;
}
}
// 递推法实现扩展欧几里德算法
long exgcd(long a, long b, long *x, long *y)
{
long x0=1, y0=0, x1=0, y1=1;
long r, q;
*x=0;
*y=1;
r = a % b;
q = (a - r) / b;
while(r)
{
*x = x0 - q * x1;
*y = y0 - q * y1;
x0 = x1;
y0 = y1;
x1 = *x;
y1 = *y;
a = b;
b = r;
r = a % b;
q = (a - r) / b;
}
return b;
}