2017-06-13 53 views
0

这个问题我一直在困扰着我一段时间。正如标题所说,我如何从一组数字中获得共同因素?我已经做了这段代码,但是我得到了输出“Infinity”。看一看:从JavaScript中的一组数字中获取常见因素

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 
 
     } 
 
    } 
 
    } 
 
}
<!DOCTYPE html> 
 
<html> 
 

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

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

 
</html>

,我想我可以看到有一些错误,但我不是100%肯定。提前致谢!

+0

点一个,你是零 – pwolaq

+0

分'如果(X/FX == Y/FX)'只是'如果( x == y)'fx!= 0 – James

回答

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

需要一些调整。尝试x = 11,y = 22。你可能不得不交换这两个数字。 – jiggzson

+0

@ jiggzson。谢谢,修正了这个错误。 – mamazu

+1

谢谢!真的帮助我了! – DecstarG

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] 
相关问题