辗转相减算法
两个数辗转相减(每次较大变成它本身减去较小的), 待到两数相同时这个数值就是开始时两个数的 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,yge 1), 那么 (p=(p-q)+q = (x+y)*g), 与 (gcd(p,q)=1) 矛盾。所以以两个互质的数开始辗转相减的过程中, gcd 始终为 1, 而每次都是大的减去小的, 所以两个数都始终 (ge 1), 所以最终得到的就是两个 1。
至于辗转相除算法, 实际上就是加速了辗转相减的过程。
裴蜀定理
(ax+by=gcd(a,b)) 一定有解。
由于上面的定理, 辗转相减/相除 gcd 不变, 可以容易地得出此定理。(辗转相除+归纳法)