52

我想使用 JavaScript 找到最大公约数。

有没有人做过并愿意分享?

4

3 回答 3

98

这是使用欧几里得算法的递归解决方案。

 var gcd = function(a, b) {
  if (!b) {
    return a;
  }

  return gcd(b, a % b);
}

我们的基本情况是当b等于0。在这种情况下,我们返回a

当我们递归时,我们交换输入参数,但我们将其余的a / b作为第二个参数传递。

于 2013-07-03T10:15:13.350 回答
29

取自维基百科。

递归:

function gcd_rec(a, b) {
    if (b) {
        return gcd_rec(b, a % b);
    } else {
        return Math.abs(a);
    }
}

迭代:

function gcd(a,b) {
    a = Math.abs(a);
    b = Math.abs(b);
    if (b > a) {var temp = a; a = b; b = temp;}
    while (true) {
        if (b == 0) return a;
        a %= b;
        if (a == 0) return b;
        b %= a;
    }
}
  • 根据用户的评论编辑
于 2013-07-03T10:16:00.237 回答
17
function egcd(a, b) {
    if (a == 0)
        return b;

    while (b != 0) {
        if (a > b)
            a = a - b;
        else
            b = b - a;
    }

    return a;
}
于 2013-07-03T10:15:20.670 回答