【数论】扩展欧几里得算法
转载自:exgcd详解 - zzt1208 - 博客园 (cnblogs.com)
1.exgcd是什么?
exgcd大名扩展欧几里得算法,用来求形如 $ax+by=gcd(a,b)$($a,b$ 为常数)的方程的一组整数解。
2.推导
当 $b=0$ 时,$gcd(a,b)=a$,此时 $x=1$, $y=0$
当 $b≠0$ 时,考虑到 $gcd(a,b)=gcd(b,a\ mod\ b)$,所以我们可以先递归去求 $bx+(a\ mod\ b)y=gcd(b,a\ mod\ b)$ 的解
然后再往回带:
因为 $a\ mod\ b=a−⌊\frac{a}{b}⌋b$,所以:
即方程 $gcd(a,b)=ax+by$ 的一个解为 $x=y_0,y=x_0−⌊\frac{a}{b}⌋y_0$
//公式是我一个字一个字手敲的,要敲断了……
3.代码实现
void exgcd(int &x, int &y, int a, int b) |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Texcavator 的秘密基地!
评论