为什么这种埃拉托色尼筛法的实现不正确?
Why is this implementation of Sieve of Eratosthenes incorrect?
目标是找到直到 num 为止所有素数的总和。我在另一个 post 上看到了相同的实现,但它也不起作用:Sieve of Eratosthenes algorithm in JavaScript running endless for large number
但是我用977试的时候解法也不对,是returns72179,但应该是73156。
const sumPrimes = num => {
var numList = [];
var output = [];
for (var i = 0; i < num; i++) {
numList.push(true);
}
for (var i = 2; i <= Math.sqrt(num); i++) {
if (numList[i]) {
for (var j = i * i; j < num; j += i) {
numList[j] = false;
}
}
}
for (var k = 2; k < num; k++) {
if (numList[k]) {
output.push(k);
}
}
var sum = output.reduce((acc, cur) => acc + cur, 0);
console.log(output);
return sum;
};
您的代码没有任何问题。它returns小于num
的质数之和,小于977的质数之和为72179。你的预期答案73156是小于或等于[的质数之和。 =14=] 977。相差977,因为977是素数。
目标是找到直到 num 为止所有素数的总和。我在另一个 post 上看到了相同的实现,但它也不起作用:Sieve of Eratosthenes algorithm in JavaScript running endless for large number
但是我用977试的时候解法也不对,是returns72179,但应该是73156。
const sumPrimes = num => {
var numList = [];
var output = [];
for (var i = 0; i < num; i++) {
numList.push(true);
}
for (var i = 2; i <= Math.sqrt(num); i++) {
if (numList[i]) {
for (var j = i * i; j < num; j += i) {
numList[j] = false;
}
}
}
for (var k = 2; k < num; k++) {
if (numList[k]) {
output.push(k);
}
}
var sum = output.reduce((acc, cur) => acc + cur, 0);
console.log(output);
return sum;
};
您的代码没有任何问题。它returns小于num
的质数之和,小于977的质数之和为72179。你的预期答案73156是小于或等于[的质数之和。 =14=] 977。相差977,因为977是素数。