首页 > 解决方案 > 获取前 N 个素数的总和 javascript

问题描述

我试图找到前 N 个素数的总和,下面我附上了我的代码。我在最后一部分苦苦挣扎(得到总和)。到目前为止,我已经定义了什么是质数并得到了前 N 个质数

function isPrime(number) {
  if (number <= 1) return false;
  if (number === 2) return true;
  else {
    for (let i = 2; i < number; i++) {
      if (number % i === 0) return false;
    }
    return true;
  }
}
console.log(isPrime(6)); //false 

function getNprimes(n) {
  const arr = [];
  let i = 2

  while (arr.length < n) {
    if (isPrime(i)) {
      arr.push(i)
    }
    i++
  }
  return arr;
}
console.log(getNprimes(5)); //[2, 3, 5, 7, 11]

const sumOfNPrimes = (num) => {
  let sum = getNprimes(num);
  if (sum === 0) {
    sum = getNprimes(num + 1)
    return sum;
  }
}
console.log(sumOfNPrimes(4));

标签: javascriptarrayssum

解决方案


检查sum === 0将始终返回false,因为sum它是一个数组,并且您正在使用严格相等来检查类型。您应该length改为检查属性,并使用!=运算符(例如,仅当数组的长度不是时才执行代码0)。

要计算结果数组的总和,您可以使用Array#reduce

function isPrime(number) {
  if (number <= 1) return false;
  if (number === 2) return true;
  else {
    for (let i = 2; i < number; i++) {
      if (number % i === 0) return false;
    }
    return true;
  }
}
console.log(isPrime(6)); //false 

function getNprimes(n) {
  const arr = [];
  let i = 2

  while (arr.length < n) {
    if (isPrime(i)) {
      arr.push(i)
    }
    i++
  }
  return arr;
}
console.log(getNprimes(5)); //[2, 3, 5, 7, 11]

const sumOfNPrimes = (num) => {
  let sum = getNprimes(num).reduce((a, b) => a + b);
  return sum
}
console.log(sumOfNPrimes(4));


推荐阅读