typedef long long LL;
LL ExGCD(LL a, LL b, LL &x, LL &y)
{
// x, y 为引用传参,故最终程序结束后,x,y会被赋值为可行解
if(b == 0)
{
// 递归终点,ax+by=GCD(a,b)的b为0,故方程变为
// ax=a,则可行解可以是 x=1, y=0
x = 1, y = 0;
return a;
}
LL d = ExGCD(b, a % b, x, y), t = x;
x = y, y = t - a / b * x;
return d; // 这里返回值是GCD(a,b)的结果,即最大公约数
}
int ExGcdInv(int a, int b)
{
int x, y;
ExGCD(a, b, x, y);
return x;
}