GCD大于2个数字
GCD of more than 2 numbers
function gcd (a, b) {
if(b == 0){
return a;
}
return gcd(b, a%b);
}
function gcd_more_than_two_numbers (a) {
var last = Math.max.apply(null, a);
var first = Math.min.apply(null, a);
return gcd(first, last);
}
console.log(gcd_more_than_two_numbers([9999,213123,9,15,27]));
console.log(gcd_more_than_two_numbers([5,10,15,25]));
在数组中取最低值和最高值,并为它们之间的所有数字找到gcd,这是正确的吗?这在数学上正确吗?
没有在数组中取最低值和最高值,并为它们之间的所有数字找到gcd,这是正确的吗?这在数学上正确吗?
。
您需要获取第一对的gcd,然后针对数组的所有其他元素重新计算,您可以轻松地使用reduce
:
function gcd (a, b) {
if(b == 0){
return a;
}
return gcd(b, a%b);
}
function gcd_more_than_two_numbers (a) {
return a.reduce(gcd)
}
console.log(gcd_more_than_two_numbers([9999,213123,9,15,27]))
不,它不是。
你要找的身份是gcd(a, b, c) = gcd(gcd(a, b), c)
。
我建议你使用循环来取消递归。
function gcd() {
var arr = Array.prototype.slice.call(arguments);
return arr.reduce(function(a, b) {
if (b == 0) {
return a;
}
return gcd(b, a % b);
});
}
console.log(gcd(7,14));
console.log(gcd(9999,213123,9,15,27));
console.log(gcd(5,10,15,25));
您也可以使用array.every
来检查有效性:
示例
function getGCD(arr) {
var min = Math.min.apply(null, arr);
var gcd = 1;
for (var i = gcd + 1; i <= min; i++) {
if (arr.every(x => x % i === 0))
gcd = i;
}
return gcd;
}
var arr = [100, 13000, 1110];
var arr2 = [9999, 213123, 9, 15, 27]
console.log(getGCD(arr))
console.log(getGCD(arr2))
相关文章:
- 如何在这里将两个值最低的数字相加
- 正则表达式与数字中的第二个点匹配
- 可以't将几个数字设置为<输入类型=“;数字“>
- 正好包含2个大写字母和3个数字的正则表达式
- 使用正则表达式匹配长度为六个字符的字母数字字符串
- 如何限制一个字段只接受4个数字字符作为输入,并获得'It’这是潜水警报
- 计算HTML表TD中两个数字之间的百分比
- 如何使用 JavaScript 将两个数字相加
- 创建具有2个唯一数字的Javascript数组
- 如何使用至少一个数字、一个大写字母和6-20个字符验证密码
- 用于添加两个数字的javascript闭包的用法
- 通过变量在两个数字之间切换
- 在数字字符串的最后两个数字上加上小数
- 在HTML/JavaScript中减去两个数字
- 删除第一个数字块之后的所有数字
- PHP函数识别3个数字中最低的一个并更改其类
- 将文本字段限制为三个数字
- 如何创建一个确定2个数字之间值的函数
- 用于获取两个方括号之间的数字的正则表达式
- 在列之间平分一个数字.12个糖果,10个人.2个人每人得到2个糖果,剩下的人得到1个