首先, ax+by = gcd(a, b) 这个公式肯定有解(我们令a,b的最大公因数为gcd,那么我们一定可以找到一组x,y满足此式,这个是欧几里德定理一)
所以 ax+by = gcd(a, b) * k 也肯定有解 (即在上式基础上把x和y都乘k倍)
所以,这个公式我们写作ax+by = d,(gcd(a, b) | d)
gcd(a, b) | d,表示d能整除gcd,这个符号在数学上经常见到
那么已知 a,b 求 一组解 x,y 满足 ax+by = gcd(a, b) 这个公式(即扩展欧几里得算法)
typedef long long LL;
void ex_gcd(LL a, LL b, LL &d, LL &x, LL &y)
{
if(!b)
{
d=a;
x=1;
y=0;
}
else
{
ex_gcd(b, a%b, d, y, x);
y-=x*(a/b);
}
}