扩展欧几里得算法学习笔记
好吧,其实根本不是学习笔记。只是刚刚给人解答问题时,写了下面的 \(\LaTeX\) ,觉得我自己写得很好很正确就干脆贴上来了。
首先你要会欧几里得算法:\(\gcd(x, y) = \gcd(y, x \bmod y)\)
然后扩欧就是在此基础上顺便去解一个不定方程
假设我们要求 \(ax + by = \gcd(x, y)\)(已知 \(a, b\))
而我们通过递归的方式,已经求出了 \(a0\cdot y + b0 \cdot (x \bmod y) = \gcd(x, y)\)
那么直接化简这个玩意即可:
\(x \bmod y = x - \left\lfloor\dfrac{x}{y}\right\rfloor \cdot y\)
然后代入进上面的式子
\(a0\cdot y + b0 \cdot (x - \left\lfloor\dfrac{x}{y}\right\rfloor \cdot y) = \gcd(x, y)\)
\(\therefore a0 \cdot y + b0 \cdot x - b0 \cdot \left\lfloor\dfrac{x}{y}\right\rfloor \cdot y = \gcd(x, y)\)
然后再提取公因式
\(b0 \cdot x + (a0 - b0 \cdot \left\lfloor\dfrac{x}{y}\right\rfloor )\cdot y = \gcd(x, y)\)
然后就没了,所以 $a = b0, b = a0 - b0 \cdot \left\lfloor\dfrac{x}{y}\right\rfloor $
然后再特判一下边界就行,可以自己去模版题看代码