对n以内所有素数求和

题目

在这道题目中,我们需要写一个函数,它接收一个数字参数num,返回值为不大于这个数字的所有质数之和。
质数是大于 1 且仅可以被 1 和自己整除的数。比如,2 就是一个质数,因为它只可以被 1 和 2(它本身)整除。
注意,传入函数的num不一定是质数。

代码

求一个数组是否为质数的方法isPrime有3种,见判断一个数是不是质数,

function isPrime(n) {
  let flag = n < 2 ? false : true;
  for (let i = 2, max = Math.sqrt(n); i <= max; i++) {
    if (n % i == 0) {
      flag = false;
      break;
    }
  }
  return flag
}
var sumPrimes = (
  function () {
    let arr = [false, false, true]
    return function (num) {
      if (!arr[num]) {
        for (let i = arr.length; i <= num; i++) {
          arr[i] = isPrime(i)
        }
      }
      return arr.reduce((prev, item, index, arr) => item ? prev + index : prev)
    };
  }
)();
posted @ 2020-02-07 18:44  哥哦狗子  阅读(973)  评论(0编辑  收藏  举报