我正在练习将2到参数的所有素数求和。我已经在代码中进行了如此多的工作,但是很困难。我相信通过使用splice函数,实际上是由于索引更改而跳过了一个元素。
function sumPrimes(num) {
var primearray = [];
var sum = 0;
for(var i =2; i <= num; i++){
primearray.push(i);
}
for(var j = 0; j < primearray.length; j++) {
console.log(primearray[j]);
if ((primearray[j]%2===0) && (primearray[j] >2)) {
primearray.splice(j,1);
} else if ((primearray[j]%3===0) && (primearray[j] > 3)) {
primearray.splice(j,1);
console.log(primearray);
} else if ((primearray[j]%5===0) && (primearray[j] > 5)) {
primearray.splice(j,1);
} else if ((primearray[j]%7===0) && (primearray[j] > 7)) {
primearray.splice(j,1);
}
}
sum = primearray.reduce();
return sum;
}
sumPrimes(30);
我尚未使用reduce函数,因为我仍在处理if else语句。
最佳答案
对于相同的问题,我找到了一个很好的解决方案。 afmeva被发现。这就是它的工作方式。
function isPrime(val){
//test if number is prime
for(var i=2; i < val; i++){
if(val % i === 0){
return false;
}
}
return true;
}
function sumPrimes(num) {
var answer = 0;
//loop through all numbers from 2 to input value
for(var i=2; i <= num; i++){
//sum only prime numbers, skip all others
if(isPrime(i)){
answer += i;
}
}
return answer;
}
sumPrimes(977); // 73156
Here's another good resource
关于javascript - 如何对所有素数求和?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31032165/