Javascript 使用欧几里德算法的数组值的最小公倍数
我想用欧几里德算法计算一组值的最小公倍数 我正在使用此伪代码实现:在上找到 我的javascript实现就是这样Javascript 使用欧几里德算法的数组值的最小公倍数,javascript,algorithm,greatest-common-divisor,lcm,Javascript,Algorithm,Greatest Common Divisor,Lcm,我想用欧几里德算法计算一组值的最小公倍数 我正在使用此伪代码实现:在上找到 我的javascript实现就是这样 function smallestCommons(arr) { var gcm = arr.reduce(function(a,b){ let minNum = Math.min(a,b); let maxNum = Math.max(a,b); var placeHolder = 0; while(minNum!==0){
function smallestCommons(arr) {
var gcm = arr.reduce(function(a,b){
let minNum = Math.min(a,b);
let maxNum = Math.max(a,b);
var placeHolder = 0;
while(minNum!==0){
placeHolder = maxNum;
maxNum = minNum;
minNum = placeHolder%minNum;
}
return (a*b)/(minNum);
},1);
return gcm;
}
smallestCommons([1,2,3,4,5]);
在我的whileloop中,我得到了错误
无限循环
编辑进行了一些更正,在gcm函数结束时,我使用0作为初始起始值,它应该是1,因为gcm不能从0开始
EDIT2预期的输出应该是60,因为这是1,2,3,4,5的最小公倍数您是否有意将所有变量和运算符序列混淆?;-) 使用ES6 然后对给定的整数数组使用reduce:
[1, 2, 3, 4, 5].reduce(lcm); // Returns 60
[1, 2, 3, 4, 5].reduce(lcm); // Returns 60
使用ES5 然后对给定的整数数组使用reduce:
[1, 2, 3, 4, 5].reduce(lcm); // Returns 60
[1, 2, 3, 4, 5].reduce(lcm); // Returns 60
可能是因为我在看了视频后写下了公式,然后看了维基;漂亮,因为它短得惊人,切中要害。最佳答案。我真的很喜欢ES6版本的简洁!干得好,谢谢。!极好的清洁溶液,我印象深刻:)
var gcd = function (a, b) {
return a ? gcd(b % a, a) : b;
}
var lcm = function (a, b) {
return a * b / gcd(a, b);
}
[1, 2, 3, 4, 5].reduce(lcm); // Returns 60