辗转相除求gcd的原理

题:求正整数m, n的最大公约数

解:
不妨设 m > n,令 m % n = r。(r 为自然数)。

若 r = 0,则 n 即为所求,gcd(m,n) = n;

否则,有: r = m - kn(k 为正整数),则有:

可知:
**gcd(m,n) = gcd(n,r)**
令 r0 = n,r1 = r,ri+1 = ri-1 % ri(i 为正整数),则根据上式,有:
gcd(n,r) = gcd(r0,r1) = gcd(r1,r2) = ... = gcd(ri,ri+1) = ...
上述等值变换,要么因为序列 { ri } 递减至 1 而结束,要么因为 ri 能被 ri+1 整除 而提前终止。由于 1 可整除任何正整数,故最终总有:
**gcd(m,n) = gcd(rq,rq+1) = rq+1**