我很好奇GCD问题。我正在学习Coursera算法工具箱课程,它指出该问题的朴素解决方案是:
for d from 1 to a+b:
if d|a and d|b:
best(or max) d
return best
我有点糊涂了。最大公因数难道不是min(a,b)而是a+b吗?因为两个数字中较小的那个不可能被较大的数字整除,对吧?
我很好奇GCD问题。我正在学习Coursera算法工具箱课程,它指出该问题的朴素解决方案是:
for d from 1 to a+b:
if d|a and d|b:
best(or max) d
return best
是的,你说得对。你可以重写算法,让循环在min(a,b)处停止。
for d from 1 to min(a,b):
if d|a and d|b:
best(or max) d
return best
这个实现比第一个更快。你仍然可以通过向后循环来改进它:
for d from min(a,b) to 1:
if d|a and d|b:
break
return d