对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)
};
}
)();