私は素数アルゴリズムに取り組んでおり、ほぼ完成しました。ループが終了するたびに出力配列が更新されるので、素数で関数を呼び出すと、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];
どのように私はこの問題を解決することができますか?
forループにconsole.log(outputArr)を追加すると、ループごとに配列が出力されます。最後のループまで配列に何も追加していないことがわかりますので、これが問題です。 –
あなたはそれをデバッグしようとしましたか?なぜ追加しませんか? '分割された'の定義の下に 'console.log(divided.length)'があります。 –
毎回同じパラメータを使って、すべての 'i'に対して' rangeArr'を再計算したようです。私はそれが必要だとは思わない - それは 'for'ループの前に一度構築するほうがよいでしょう。 – ahwayakchih