我正在上课,我们需要制作一个Prime Sieve。我的教师代码运行速度是我的两倍,我很难理解为什么。您能否对我可以改进的内容有所了解?
var primeSieve = function (end) {
var results = [];
for(var i = 0; i <= end; i++) {
results.push(i);
}
results[0] = null;
results[1] = null;
for(var i = 2; i <= end; ) {
var j = i + i;
do {
results[j] = null;
j = j + i;
} while (j <= end);
do {
i++;
} while(results[i] !== null);
}
return results.filter((val) => val);
};
答案 0 :(得分:0)
你必须设置为null的第一个数字是i * i而不是i + i,因为每个较低的数字已经被另一个素数设置为null。 I = 7 你设置2 * 7(已经被2设置为空),3 * 7(按3),4 * 7(设置为空2)... 但第一个尚未设置为null的是7 * 7
此外,循环一直持续到“结束”,但由于您可以越过的第一个数字是i * i所有迭代的i&gt; sqrt(结束)什么都不做。
这篇文章包含了这些和进一步改进的实现:Most elegant way to generate prime numbers