我写了这个函数,为给定的数字范围生成素数,我认为必须给出预期的结果是简单明了的,但是,有些数字被排除在结果之外:
function numberator(from, to) {
numbers = [];
for (x = from; x <= to; x++) {
numbers.push(x);
}
return numbers;
}
function primeNumbers(array) {
for (i = 0; i < array.length; i++) {
for (j = 2; j < array[i]; j++) {
if (array[i] % j == 0) {
array.splice(i, 1);
}
}
}
return array;
}
console.log(primeNumbers(numberator(1,100)));
结果包含:27,35和95(也是1,我可以稍后处理.)
我试图找出原因,但我不能.
该错误是使用splice 对数组进行就地修改.你继续增加i,而数组的大小在执行时被修改.
您可以通过在每个切片操作后打印整个数组来调试它.
此外,该解决方案效率非常低,并且对于稍长的范围将表现非常差.使用Eratosthenes筛选