在JavaScript中迭代GCD函数

时间:2016-01-22 12:56:29

标签: javascript jquery greatest-common-divisor

我正在使用此JavaScript函数来确定从输入字段获取的两个值的GCD:

Math.GCD = function(first,second) {
    if (first < 0) first = -first;
    if (second < 0) second = -second;
    if (second > first) {var temp = first; first = second; second = temp;}
    while (true) {
        first %= second;
        if (first == 0) return second;
        second %= first;
        if (second == 0) return first;
    }
};

如果用户在第三个输入字段中输入一个数字,我想扩展它来计算三个数字的GCD(否则,用户将输入两个并根据此函数计算)。作为JavaScript的新手,我不知道如何为三个值扩展此函数。有人可以帮忙吗?

小提琴:https://jsfiddle.net/tjj7won4/1/

另外,我想以同样的方式确定LCM,如在小提琴中所观察到的那样,但是,我再次不确定如何扩展给定的功能。请帮忙。

2 个答案:

答案 0 :(得分:1)

要扩展任意数量的参数n的函数,只需在参数数组上循环n-1次。

这是因为数学gcd(a,b,c) = gcd(a,gcd(b,c))

用法:var GCDresult = Math.GCD([16,222,70]); // result: 2

// numbers is an array of numbers: ex. [15,20,35,170]
Math.GCD = function(numbers) {
  for (var i = 1 ; i < numbers.length ; i++){
    // take the next number for GCD with the first, 
    // and store the result back in the first.
    numbers[0] = twogcd(numbers[0], numbers[i]);
  }
  return numbers[0];

  // following is your original GCD function
  function twogcd(first, second) {
    if (first < 0) first = -first;
    if (second < 0) second = -second;
    if (second > first) {var temp = first; first = second; second = temp;}
    while (true) {
        first %= second;
        if (first == 0) return second;
        second %= first;
        if (second == 0) return first;
    }
   }
};

为GCD案例更新的JSFiddle是here

答案 1 :(得分:0)

你可以通过使用相同的函数来接受任何数量的参数。

您也可以延长它:fiddle

Math.GCDe = function() {
    var result = arguments[0];
        for (var i=1;i<arguments.length;i++) 
        result = this.GCD(result,arguments[i]);
    return result;
}