我正在研究素数算法,我几乎完成了它。我认为每次循环完成时输出数组都会更新,所以如果我用素数调用函数:例如 primes(7)
,我得到 [7]
而不是 [2,3,5,7]
。如果使用非素数调用,则输出 arr 为空。
这里是代码:
function rimes(num){
var outputArr = [];
for(var i=1; i<=num; i++){
function range(start, count) {
return Array.apply(0, Array(count))
.map(function (element, index) {
return index + start;
});
}
var rangeArr = range(1,num);
var current = i;
function rangeFiltering(value){
return value !== 1 && value < current;
}
var filteredRange = rangeArr.filter(rangeFiltering);
function dividingByEachRangeElement(rangeElement){
return current % rangeElement !== 0;
}
var divided = filteredRange.filter(dividingByEachRangeElement);
if(divided.length === num - 2){ //current is prime if there are all numbers from 1 to current in divided array.(if there are zeros after modulo) i.e. when current is 5(prime), divided array is [2,3,4]. When current is 6(non prime), divided arr is [4,5] - 2,3 are missing because 6%2 = 0 and 6%3 = 0.
outputArr.push(current);
}
}
console.log(outputArr);
}
sumPrimes(47);
//sumPrimes(6) -> [];
//sumPrimes(7) -> [7];
//sumPrimes(11) -> [11];
我该如何解决这个问题?
最佳答案
您的问题已上线:
if(divided.length === num - 2)
这意味着只有当divided
的长度恰好等于num - 2
时,当前数字才会被添加到outputArr
,这仅在以下情况下为真:在您的示例中,i
或 current
等于 7
。
将其更改为:
if(divided.length === current - 2)
应该可以解决问题。
关于javascript - 仅将最后一个值推送到数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37470887/