Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.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 - Fatal编程技术网

最低公共倍数的Javascript代码

最低公共倍数的Javascript代码,javascript,Javascript,我一直在寻找关于这方面的解释,但我只在其他编程语言中找到了答案,这些语言对我来说并不十分清楚 我怀疑这是我没有理解的背后的数学,因为代码已经足够清楚了,但是如果有人不介意解释,我将不胜感激 (我在那里添加了这些评论,试图向自己解释发生了什么,因此,如果它们是错误的,那么知道它们也是很好的。) 编辑以添加:预期输入为两个数字的数组。任务是为这两个值(包括)之间的所有数字找到最低的公倍数。这可能很重要。对不起 function smallestCommons(arr) { var i =

我一直在寻找关于这方面的解释,但我只在其他编程语言中找到了答案,这些语言对我来说并不十分清楚

我怀疑这是我没有理解的背后的数学,因为代码已经足够清楚了,但是如果有人不介意解释,我将不胜感激

(我在那里添加了这些评论,试图向自己解释发生了什么,因此,如果它们是错误的,那么知道它们也是很好的。)

编辑以添加:预期输入为两个数字的数组。任务是为这两个值(包括)之间的所有数字找到最低的公倍数。这可能很重要。对不起

function smallestCommons(arr) { 
    var i = Math.min(arr[0], arr[1]);
    var j = Math.max(arr[0], arr[1]);
    var resultArr = [];

    // make an array of the numbers from high to low
    while (j >= i) {
        resultArr.push(j);
        j--;
    }

    return resultArr.reduce(function(x, y) {
        var a = x, 
            b = y, 
            t = 0; 

        // while a is not evenly divisible by b
        while (a % b) { 
            a = a % b;  // a is the remainder
            t = a;      // t is the remainder
            a = b;      // a is now the divisor
            b = t;      // the divisor is now the remainder
        }
        return (x / b) * y; 
    }); 
}

这个评论并不正确。这条线在i和j之间创建一个数字数组,从高到低排序。也就是说,如果数组=[1,10],那么resultar将是[10,9,8.7,6,5,4,3,2,1]

真的,你所拥有的是第一个和第二个数字之间的差异。这是欧几里德算法寻找GCD(最大逗号分母)的第一步

第二部分是一步计算gcd,计算基本因子并得到它们的乘积。

使用此代码

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
函数最小公倍数(最小、最大){
功能范围(最小、最大){
var-arr=[];
对于(var i=min;i 360360

您期望的输入是什么?
arr
是一个表示什么的数组?您是否尝试在整个代码中设置断点?例如,如果您将断点放入jsbin中,请添加一些“调试器”如果你不确定发生了什么,打开你的控制台,随便看看。这可能是你最好的选择。这段代码看起来几乎是故意的迟钝:在没有明显原因的情况下将命令式和函数式范例与单字符变量名混合在一起。如果你正试图编写一个算法,以找到最低的通用多重le,这样做的方法要简单得多。我建议放弃这段代码,尝试一种不同的(更合理的)方法方法。对不起,各位。我意识到我遗漏了任务的大背景,以及一些其他相关信息。我已经添加了它们。谢谢,贝尔福德。欧几里德算法是我没有得到的数学部分。我曾想过采用素因子方法,但这对我来说更难翻译这是为了理解代码。谢谢,Prasad。我实际上是想了解我发布的代码在做什么,而不仅仅是解决问题。