说说辗转相除法原理
今天我们来解释一下辗转相除法,相信大家都懂的这种方法。(不懂得自己去百度。)
现在解释一下这个方法背后的原理。
设定2个数: M
, N
(其中M >= N
)
令c
为M
, N
的最大公因数,
则可得
M = m * c
N = n * c
其中m
,n
为某整数,使得m * c
得 M
, n * c
得 N
。
可知,m
、n
互为质数————如果不是互为质数,c就不是最大公因数。
辗转相除法的第一步,
M / N = a ... L
其实也可以理解为
L = (m - a * n) * c
为什么呢?这就是简单的除法原理呀。不解释了,接着走。
辗转相除法的规则,就是用N
和L
继续往下求最大公因数了。
为什么这样做呢?因为N
和L
的最大公因数也是M
和N
的最大公因数。
为什么N
和L
的最大公因数也是M
和N
的最大公因数?
这就需要证明了。以下是这一步的证明。提前说一下,以下的证明,就是辗转相除法的原理的。辗转相除法,就是以下原理的递归实现。递归实现的意思,就是不断地算下去。
证明如下
已知
M = m * c
N = n * c
L = (m - a * n) * c
其中m
和n
互质,所以c是M
和N
最大公因数。
如果m - a * n
与n
互质,那么N
和L
的最大公因数就是c了。
为什么?因为m - a * n
和 n
没法再取出一个公因数来了。
那么怎么证明m - a * n
与n
互质呢?
反证法!
如果不是互质的,那么
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
这么一来,m
和n
还叫互质吗??
反证结束
前面已经说了,辗转相除法,就是以上证明了的原理的递归实现。