从JavaScript中的一组数字中获取公共因子

时间:2017-06-13 20:32:43

标签: javascript math factors

我这个问题一直困扰着我一段时间。正如标题所说,我怎样才能从一组数字中得到共同因子?我已经制作了这段代码,但我得到了输出" Infinity"。看看:



var x = 10; //Example Numbers
var y = 15;
var fx = 0;

function start() {
  for (fx = 0; fx < x; fx++) {
    if (x / fx % 1 != 0 || y / fx % 1 != 0) { //My attempt at narrowng down whole numbers
      if (x / fx == y / fx) { //Checking if they are the same
        alert(x / fx) //This outputs infinity
      }
    }
  }
}
&#13;
<!DOCTYPE html>
<html>

<head>
  <title>Eg</title>
</head>

<body>
  <button onclick="start()">Click</button>
</body>

</html>
&#13;
&#13;
&#13;

我想我可以看到一些错误,但我并非100%肯定。提前谢谢!

2 个答案:

答案 0 :(得分:2)

我建议你做的是编写一个能够同时考虑这两个数字的函数:

function factorList(number){
  var factors = [];
  for(var i = 1; i < number; i++){
    if(number % i == 0)
      factors.push(i);
  }
  return factors;
}

然后在start()方法中,您只需找到两个列表中的因素即可:

function factorList(number) {
  var factors = [];
  for (var i = 1; i <= number; i++) {
    if (number % i == 0)
      factors.push(i);
  }
  return factors;
}
var x = 11; //Example Numbers
var y = 22;

function start() {
  var factors = factorList(x);
  for (var i = factors.length - 1; i >= 0; i--){
    if (y % factors[i] != 0)
      factors.splice(i, 1);
  }
  console.log(factors);
}

start();

如果您只有两个数字,这个解决方案很容易扩展,只需再次过滤因子。

答案 1 :(得分:1)

这是支持多个数字的一​​种方法:

function find_common_factors(...args) {
  let common_factors = [1];
  let min_val = Math.min(...args)
  for (let fx = 2; fx <= min_val; fx++)
    if (args.every(arg => arg / fx % 1 === 0))
      common_factors.push(fx)
  return common_factors;
}

console.log(find_common_factors(10, 15)) // [1, 5]
console.log(find_common_factors(18, 36, 90)) // [1, 2, 3, 6, 9, 18]