javascript – 如何找到一系列数字的最小公倍数?

给定两个数字的数组,让它们定义数字范围的开始和结束.例如,[2,6]表示范围2,3,4,5,6.我想编写 javascript代码来找到范围的最小公倍数.我的代码仅适用于小范围,不像[1,13](这是范围1,2,6,7,8,9,10,11,12,13),其中导致堆栈溢出.如何有效地找到范围的最小公倍数?
function leastCommonMultiple(arr) {
    var minn,max;
    if ( arr[0] > arr[1] ) {
        minn = arr[1];
        max = arr[0];
    } else {
        minn = arr[0];
        max = arr[1];
    }
    function repeatRecurse(min,max,scm) {
        if ( scm % min === 0 && min < max ) {
            return repeatRecurse(min+1,scm);
        } else if ( scm % min !== 0 && min < max ) {
            return repeatRecurse(minn,scm+max);
        }
        return scm;
    } 
    return repeatRecurse(minn,max);
}

解决方法

我认为这样做完成了.
function leastCommonMultiple(min,max) {
    function range(min,max) {
        var arr = [];
        for (var i = min; i <= max; i++) {
            arr.push(i);
        }
        return arr;
    }

    function gcd(a,b) {
        return !b ? a : gcd(b,a % b);
    }

    function lcm(a,b) {
        return (a * b) / gcd(a,b);   
    }

    var multiple = min;
    range(min,max).forEach(function(n) {
        multiple = lcm(multiple,n);
    });

    return multiple;
}

leastCommonMultiple(1,13); // => 360360

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...