小记
辗转相减算法
两个数辗转相减(每次较大变成它本身减去较小的), 待到两数相同时这个数值就是开始时两个数的 gcd
设有两个数 \(a>b\), 设其 gcd 为 \(g\), 则显然 \(a=x*g>b=y*g\) 且 \(gcd(x,y)=1\)。
于是相当于证明两个互质的数辗转相减最终会得到 1。
这个就比较显然, 因为若有数 \(p>q\) 且 \(gcd(p,q)=1\), 那么对于 \(p-q\) 和 \(q\), 若其 gcd 不为 1, 即 \(p-q=x*g\) , \(q=y*g\) , \(g>1,\quad x,y\ge 1\), 那么 \(p=(p-q)+q = (x+y)*g\), 与 \(gcd(p,q)=1\) 矛盾。所以以两个互质的数开始辗转相减的过程中, gcd 始终为 1, 而每次都是大的减去小的, 所以两个数都始终 \(\ge 1\), 所以最终得到的就是两个 1。
至于辗转相除算法, 实际上就是加速了辗转相减的过程。
裴蜀定理
\(ax+by=gcd(a,b)\) 一定有解。
由于上面的定理, 辗转相减/相除 gcd 不变, 可以容易地得出此定理。(辗转相除+归纳法)