我正在處理素數算法,並且我幾乎完成了它。我認爲每次循環結束時都會更新輸出數組,因此如果我用素數調用函數:例如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];
我怎麼能解決這個問題?
如果將console.log(outputArr)添加到for循環中,則會導致它在每個循環中輸出數組。你可以告訴它,直到最後一個循環它纔會向數組添加任何東西,所以這是你的問題。 –
你嘗試過調試嗎?爲什麼不添加例如console.log(divided.length)'低於'divided'的定義,看看發生了什麼? –
您似乎每次使用相同的參數重新計算每個「i」的'rangeArr'。我不認爲這是必要的 - 在'for'循環之前構建一次會更好。 – ahwayakchih