我正在练习将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/

10-12 22:27