我打算在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] +"!");
}
答案 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