从 JavaScript 中的一组数字中获取公因子
Getting Common Factors From A Set Of Numbers In JavaScript
这个问题困扰我好久了。正如标题所说,如何从一组数字中得出公因数?我编写了这段代码,但得到了输出 "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
}
}
}
}
<!DOCTYPE html>
<html>
<head>
<title>Eg</title>
</head>
<body>
<button onclick="start()">Click</button>
</body>
</html>
我想我可以看到其中的一些错误,但我不是 100% 确定。提前致谢!
我建议你做的是编写一个函数,将这两个数字都考虑在内:
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();
这个解决方案很容易扩展,如果你有两个以上的数字,只需再次过滤因素。
这是一种支持多个号码的方法:
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]
这个问题困扰我好久了。正如标题所说,如何从一组数字中得出公因数?我编写了这段代码,但得到了输出 "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
}
}
}
}
<!DOCTYPE html>
<html>
<head>
<title>Eg</title>
</head>
<body>
<button onclick="start()">Click</button>
</body>
</html>
我想我可以看到其中的一些错误,但我不是 100% 确定。提前致谢!
我建议你做的是编写一个函数,将这两个数字都考虑在内:
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();
这个解决方案很容易扩展,如果你有两个以上的数字,只需再次过滤因素。
这是一种支持多个号码的方法:
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]