我对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吗?因为两者中较小者不可能被两者中的较大者分开?
答案 0 :(得分:4)
是的,你是对的。你可以重写算法,循环停止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