作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 JavaScript 中工作,这有点令人困惑,因为代码返回了正确的素数和。它正在处理更大的数字。有一个错误,对于 977,它返回 976 的素数之和,即 72179,而不是 977 的素数之和,即 73156。到目前为止,我测试的所有内容都正确返回。
function sumPrimes(num) {
var sum = 0;
var count = 0;
var array = [];
var upperLimit = Math.sqrt(num);
var output = [];
for (var i = 0; i < num; i++) {
array.push(true);
}
for (var j = 2; j <= upperLimit; j++) {
if (array[j]) {
for (var h = j * j; h < num; h += j) {
array[h] = false;
}
}
}
for (var k = 2; k < num; k++) {
if (array[k]) {
output.push(k);
}
}
for (var a = 0; a < output.length; a++) {
sum += output[a];
count++;
}
return sum;
}
sumPrimes(977);
最佳答案
问题源于您的“seive”Array
从 0 开始索引,但您的算法假定 array[n]
代表数字n
.
因为你想要array[n]===true
意思是n
是素数,你需要一个 Array
长度978
如果您希望最后一项被索引为 array[977]
并且意味着数字977
.
当我更改 < num
的所有实例时,问题似乎得到解决至 < num+1
.
关于javascript - 使用埃拉托色尼筛法的素数和找不到错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38385741/
我是一名优秀的程序员,十分优秀!