欧几里得算法:计算两个正整数的最大公约数

这个算法太精彩了吧!

  • 问题导入

12和18的最大公约数是多少?

  • 欧几里得算法

欧几里得算法又称辗转相除法,用来求两个正整数的最大公约数。以上面的1997和615为例,用欧几里得算法求解如下:

1997=615∗3+152

615=152∗4+7

152=7∗21+5

7=5∗1+2

5=2∗2+1

2=1∗2+0

当被加的数为0时,可以得出,1997和615的最大公约数为1。

以上做法的依据是以下定理:

两个整数的最大公约数等于其中较小的那个数和两数相除余数的最大公约数。

 

并可以证明欧几里得算法一定能在有限步内结束。

利用图形可以更直观的理解欧几里得算法,如图2所示:

欧几里得算法:计算两个正整数的最大公约数_第1张图片

图2. 欧几里得图解法(摘自维基百科)

长方形的长:1071,宽:462。用边长为462的正方形填充该长方形,余下长:462,宽:147的长方形,然后用边长为147的正方形进行填充,余下长:147,宽:21的长方形,最后用边长为21的正方形填充后发现不再有空余的空间,结论:1071和462的最大公约数是21。

另外,python的实现是:

a,b="1071,462".split(",")

a,b=int(a),int(b)

c=a%b

while c:

        a,b=b,c

        c=a%b

print(b)

你可能感兴趣的:(算法,机器学习,人工智能)