Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用欧几里德算法的数组值的最小公倍数_Javascript_Algorithm_Greatest Common Divisor_Lcm - Fatal编程技术网

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){

我想用欧几里德算法计算一组值的最小公倍数

我正在使用此伪代码实现:在上找到

我的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]);
在我的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