我希望能使用欧几里得算法计算数值数组的最小公倍数。
我正在使用此伪代码实现:在维基百科上找到。
我正在使用此伪代码实现:在维基百科上找到。
function gcd(a, b)
while b ≠ 0
t := b;
b := a mod b;
a := t;
return a;
我的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){
placeHolder = maxNum;
maxNum = minNum;
minNum = placeHolder%minNum;
}
return (a*b)/(minNum);
},1);
return gcm;
}
smallestCommons([1,2,3,4,5]);
我在while循环中遇到了错误。
无限循环。
编辑 在gcm函数的末尾进行了一些更正,我使用了0作为初始值,但实际上应该是1,因为你不能从0开始求最大公约数。
编辑2 期望的输出结果应该是60,因为1、2、3、4、5的最小公倍数为60。