最大公约数 - 上界

时间:2017-04-17 00:06:45

标签: algorithm

我对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吗?因为两者中较小者不可能被两者中的较大者分开?

1 个答案:

答案 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