先来介绍一下辗转相除法
辗转相除法又叫欧几里得算法,是欧几里得最先提出来的.辗转相除法的实现,是基于下面的原理(在这里用(a,b)表示a和b的最大公因数):
(a,b)=(a+b,b)=(a,ka+b),其中a、b、k都为自然数.………………①
PS: (a,b)=(a-b,b)=(a,ka-b),可加亦可减
也就是说,两个数的最大公约数,将其中一个数加到另一个数上,得到的新数,其公约数不变,比如(4,6)=(4+6,6)=(4,6+2×4)=2.
证明:
如果p是a和ka+b的公约数,p整除a,也能整除ka+b.那么就必定要整除b,所以p又是a和b的公约数,从而证明他们的最大公约数也是相等的.
基于上面的原理,就能实现我们的迭代相减法:
(78,14)=(64,14)=(50,14)=(36,14)=(22,14)=(8,14)=(8,6)=(2,6)=(2,4)=(2,2)=(0,2)=2
思路很简单,看了就懂
在上面的过程中,由(78,14)到(8,14)完全可以一步到位,因为(78,14)=(14×5+8,14)=(8,14),由此就诞生出我们的辗转相除法:
求法如下
*(1)用大的数对小的数求余
*(2)把小的数赋值给大的数,把求余获得的结果赋值给小的数,
*(3)循环上一步的操作,直到求余的结果为零
*(4)上一步被求余的数就是我们要的最大公约数,不信的话,你可以动手试试
迭代相减法和辗转相除法在本质上是一样的,相对来说,减法比较简单,但是除法步数少.
其实最大公约数还有更相减损术和Stein算法, 这些之后再说