我的Prime Sieve效率低下哪里?

时间:2017-11-03 02:21:06

标签: javascript algorithm

我正在上课,我们需要制作一个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);
};

1 个答案:

答案 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