本文整理一下欧几里得算法和一些能用类欧解决的式子。
欧几里得算法与辗转相除
如何求两个数的gcd?
如果$d=gcd(x, y)$,那么$d|x,d|y,d|(x-y)$,我们把他们相减之后这个因子依然存在,但是倍数变小了。
一直这样往下做,我们最后可以把那个较小的数字变成$d$的一倍,也就是求出了$gcd(x,y)$。
复杂度
每次较大的数字至少会缩小一半,所以复杂度级别。
exgcd
线性方程组求解
求$x,y$。
那么有
1 | void exgcd(ll a, ll b, ll& x, ll& y, ll& c) |
类欧
常见的类欧式子有三种。分别做出一点证明。
$f$
若或
若且
$g$
如果或
否则
令