之前我也实现过最大公约数的求解,采用了一种近乎穷举的方式来实现的。一次坐火车的时候带着高德纳的《计算机编程艺术》第一卷看了下,英语退步的厉害没有看懂太多东西,倒是看到了一个求取最大公约数的算法。看完之后,一下子觉得自己之前的算法是多么差。
下面使用Python简单进行一下算法实现:
defCommDevisor(m,n):
r = m % n
while r != 0:
m = n
n = r
r = m % n
return n
print(CommDevisor(120,25))
以上程序执行的结果如下:
==============RESTART: E:\WorkSpace\算法\计算机编程艺术\CommDevisor.py ==============
5
再做一点其他的测试,计算的记录如下:
>>>CommDevisor(24,120)
24
>>>CommDevisor(25,120)
5
>>>CommDevisor(120,24)
24
>>>CommDevisor(120,120)
120
从上面的结果看,算法还是很准确的。这段算法从数学上也能够推导出严密的结论,至于如何推导,后续做一下理解之后再做一次总结。