Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.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

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

如何在这个Javascript算法中管理内存?

如何在这个Javascript算法中管理内存?,javascript,algorithm,Javascript,Algorithm,我对以下问题的解决方案在编译器中给出了正确答案,但由于以下错误被在线法官拒绝:JS分配失败-进程内存不足。 我应该在我的算法中改变什么来消除这个错误 Codewars Kata:您必须编写一个函数getAllPrimeFactors,该函数以整数作为参数,并返回一个数组,该数组包含按升序因子进行的素数分解,如果一个因子在分解中多次出现,则它在数组中的出现次数应与此相同 例如: getAllPrimeFactors(100) returns [2,2,5,5] in this order. g

我对以下问题的解决方案在编译器中给出了正确答案,但由于以下错误被在线法官拒绝:JS分配失败-进程内存不足。 我应该在我的算法中改变什么来消除这个错误

Codewars Kata:您必须编写一个函数getAllPrimeFactors,该函数以整数作为参数,并返回一个数组,该数组包含按升序因子进行的素数分解,如果一个因子在分解中多次出现,则它在数组中的出现次数应与此相同

例如:

 getAllPrimeFactors(100) returns [2,2,5,5] in this order.
getUniquePrimeFactorsWithCount(100) returns [[2,5],[2,2]]
getUniquePrimeFactorsWithProducts(100) returns [4,25]
这种分解可能不是最实际的

您还应该编写GetUniquePrimeFactorWithCount,该函数将返回一个包含两个数组的数组:一个包含分解中出现的素数,另一个包含它们各自的幂

例如:

 getAllPrimeFactors(100) returns [2,2,5,5] in this order.
getUniquePrimeFactorsWithCount(100) returns [[2,5],[2,2]]
getUniquePrimeFactorsWithProducts(100) returns [4,25]
您还应该为GetUniquePrimeFactors和Products编写一个数组,该数组包含其各自幂的素数因子

例如:

 getAllPrimeFactors(100) returns [2,2,5,5] in this order.
getUniquePrimeFactorsWithCount(100) returns [[2,5],[2,2]]
getUniquePrimeFactorsWithProducts(100) returns [4,25]
错误,如果:

n不是一个数字 n不是整数 n为负或0 这三个函数应该分别返回

 [], [[],[]] and [].
边缘情况:

if n=0, the function should respectively return [], [[],[]] and [].
if n=1, the function should respectively return [1], [[1],[1]], [1].
if n=2, the function should respectively return [2], [[2],[1]], [2].
n=2的结果是正常的。n=1的结果是任意的,已选择返回有用的结果。n=0的结果也是任意的,但不能选择既有用又直观的结果

([[0],[0]]
将是有意义的,但不适用于分解的一般用途

[[0],[1]] 
可以工作,但不是直观的。)

这是我的算法:

function getAllPrimeFactors(n) { 
    var fact=[];
    while(n%2===0)
    {
        fact.push(2);
        n=n/2;
    }
    var i=3;
    while(i<=Math.floor(Math.sqrt(n)))
    {
        while(n%i===0)
        {
            fact.push(i);
            n=n/i;
        }
        i++;
    }

    if(n>2)
    {
        fact.push(n);
    }

    return fact;
}

function getUniquePrimeFactorsWithCount(n) { 
    var fact=getAllPrimeFactors(n);
    var i=0;
    var count=[];
    var unique=[];
    var c=0;
    while(i<fact.length)
    {
        if(fact[i]===fact[i+1])
        {
            c++;
        }
        else
        {
            count.push(c+1);
            c=0;
            unique.push(fact[i]);
        }
        i++;
    }

    var fact_count=[];
    fact_count.push(unique);
    fact_count.push(count);
    return fact_count;
}

function getUniquePrimeFactorsWithProducts(n) { 
    var fact_count=getUniquePrimeFactorsWithCount(n);
    var fact_prod=[];
    var i=0;
    while(i<fact_count[0].length)
    {
        var prod=1;
        var j=1;
        while(j<=fact_count[1][i])
        {
            prod*=fact_count[0][i];
            j++;
        }
        fact_prod.push(prod);
        i++;
    }
    return fact_prod;
}
函数getAllPrimeFactors(n){ var事实=[]; 而(n%2==0) { 事实。推(2); n=n/2; } var i=3; while(i2) { 事实。推(n); } 返回事实; } 函数GetUniquePrimeFactorWithCount(n){ var事实=getAllPrimeFactors(n); var i=0; var计数=[]; var-unique=[]; var c=0;
虽然(i您的问题是,如果通过0,您将进入一个无止境的循环。在特殊情况下,您应该使用0和负数。

有一个输入条件,表示输入大于0@Varun输入条件在哪里?规范说明了什么输入是无效的,以及如果传递了无效输入,将返回什么。您应该ect测试案例,其中您通过了无效的输入,以查看您是否做了正确的事情。现在您没有。您是否有“内存不足”案例的输入数据样本?@Georgy否。在线法官通过了所有案例,但解决方案失败,因为它说运行解决方案需要600多秒,因此很有趣。他们可以给您如果你真的是一个大数字,素数1,或一组非常大的数字,你会尝试寻找年龄的因式分解。同样奇怪的是,他们说
这个分解可能不是最实用的
。从数学上讲,这个语句在这里没有任何意义。你最好通过帮助中心询问他们。同时尝试检查0输入。Wild猜猜看,但为什么不呢?)