如何使我的代码减慢速度(JavaScript) - 最大的素数因素

时间:2015-02-05 18:01:58

标签: javascript primes prime-factoring

我打算在Javascript中找到数字n的最大素数因子。但是,我认为这段代码要慢或可以分类,但我不知道如何。 要点是显示数组因子的最后一个元素,这将是最大因素。任何人都有关于我如何缩短这一点的任何提示? 问题是我的浏览器通知我页面花了太长时间来回复12位数字。我可能不会使用数组吗?

function biggest(n) {
// Makes a list of primes smaller than n
var primes = [2];
for (i=3; i < n ; i++) {
    var j=0;
    while (j<primes.length) 
    {   var quotient = i/primes[j];
    if (quotient !== Math.floor(quotient)) 
            {var hasDivisor = false;
            j++;
            }

        else
            {var hasDivisor = true;
            j=primes.length+1;
            }

    }

    if (hasDivisor == false) 
        {primes.push(i);}
} 


// Makes a list of factors
var factors = [];
for (i=0; i<primes.length; i++) {
    var quotient = n/primes[i];

    if (quotient==Math.floor(quotient)) {

        factors.push(primes[i]);}
}
    if (factors.length==0) {
    factors.push(1);
}


    items.push("De biggest factor is "+ factors[factors.length-1] +"!"); 



}

1 个答案:

答案 0 :(得分:2)

您只需要一个素数列表,直到 n 的平方根,因为如果 n = p * q < / em>, p q 中的一个或另一个必须小于 n 的平方根( n <时除外/ em>是一个完美的广场)。而不是通过迭代所有可能的除数来计算素数,使用Eratosthenes的Sieve要快得多;在伪代码中:

function primes(n)
    ps := []
    sieve := makeArray(2..n, True)
    for p from 2 to n
        when sieve[p]
            append p to ps
            for i from p*p to n step p
                sieve[i] := False
    return ps