说说辗转相除法原理

今天我们来解释一下辗转相除法,相信大家都懂的这种方法。(不懂得自己去百度。)

现在解释一下这个方法背后的原理。

设定2个数: M, N(其中M >= N

cM, N的最大公因数,

则可得

M = m * c  

N = n * c  

其中m,n为某整数,使得m * cMn * cN

可知,mn互为质数————如果不是互为质数,c就不是最大公因数。

辗转相除法的第一步,

M / N = a ... L  

其实也可以理解为

L = (m - a * n) * c  

为什么呢?这就是简单的除法原理呀。不解释了,接着走。

辗转相除法的规则,就是用NL继续往下求最大公因数了。

为什么这样做呢?因为NL的最大公因数也是MN的最大公因数。

为什么NL的最大公因数也是MN的最大公因数?

这就需要证明了。以下是这一步的证明。提前说一下,以下的证明,就是辗转相除法的原理的。辗转相除法,就是以下原理的递归实现。递归实现的意思,就是不断地算下去。

证明如下

已知

M = m * c  

N = n * c  

L = (m - a * n) * c  

其中mn互质,所以c是MN最大公因数。

如果m - a * nn互质,那么NL的最大公因数就是c了。

为什么?因为m - a * nn没法再取出一个公因数来了。

那么怎么证明m - a * nn互质呢?

反证法!

如果不是互质的,那么

m - a * n = x * d  

n = y * d  

那么

(m - a * n) + (a * n) = xd + a * (y * d) = (x + a*y) * d  

(m - a * n) + (a * n) = m  

s.t. m = (x + a*y) * d  

while n = y * d  

这么一来,mn还叫互质吗??

反证结束

前面已经说了,辗转相除法,就是以上证明了的原理的递归实现。