「模板」扩展欧几里得算法(exgcd)
扩展欧几里得算法(exgcd)
求解不定方程 \(ax+by=gcd(a,b)\)
设
\[ax+by=gcd(a,b)
\]
\[bx'+(a\%b)y'=gcd(b,a\%b)
\]
因为
\[gcd(a,b)=gcd(b,a\%b)
\]
其中
\[a\%b=a-b\left\lfloor\dfrac{a}{b}\right\rfloor
\]
所以
\[ax+by=bx'+(a\%b)y'=bx'+(a-b \left\lfloor\dfrac{a}{b}\right\rfloor)y'
\]
整理可得
\[ax+by=ay'+b(x'-\left\lfloor\dfrac{a}{b}\right\rfloor y')
\]
所以
\[x=y',y=x'-\left\lfloor\dfrac{a}{b}\right\rfloor y'
\]
int exgcd(int a, int b, int &x, int &y)
{
if(!b)
{
x = 1, y = 0;
return a;
}
int d = exgcd(b, a % b, y, x);
y -= a / b * x;
return d;
}
$$A\ drop\ of\ tear\ blurs\ memories\ of\ the\ past.$$