求小于等于给定数值的质数之和。
只有 1 和它本身两个约数的数叫质数。例如,2 是质数,因为它只能被 1 和 2 整除。1 不是质数,因为它只能被自身整除。
给定的数不一定是质数。
外面一套循环由2到num,里面一套循环用来判断当前值是否为质数,用flag标识,最后reduce求和。
function sumPrimes(num) {
var p=[];
for(var i =2;i<=num;i++){
var flag = true;
for(var j=2;j<i;j++){ //此处j<sqrt(i)即可
if(i%j === 0){flag=false;break;}
}
if(flag){p.push(i);}
}
return p.reduce(function(sum,cur){return sum+cur;});
}
sumPrimes(977);
不过求质数之和其实有方法上的简化,一个数若可以进行因数分解,那么分解时得到的两个数一定是一个小于等于sqrt(n),一个大于等于sqrt(n),据此,上述代码中并不需要遍历到n-1,遍历到sqrt(n)即可,因为若sqrt(n)左侧找不到约数,那么右侧也一定找不到约数,在注释里已写明。