[Intermediate Algorithm] - Sum All Primes

题目

求小于等于给定数值的质数之和。

只有 1 和它本身两个约数的数叫质数。例如,2 是质数,因为它只能被 1 和 2 整除。1 不是质数,因为它只能被自身整除。

给定的数不一定是质数。

测试用例

  • sumPrimes(10) 应该返回一个数字。
  • sumPrimes(10) 应该返回 17
  • sumPrimes(977) 应该返回 73156

分析思路

  1. 由于偶数均能被2整除,所以为了减少循环,判断质数时只判断奇数,并且从3开始 
    for (var i = 3; i <= num; i += 2)
  2. 质数的判断只需通过对 2~其平方根 取余,如果有为 0 的就不是质数

代码

1.function sumPrimes(num) {
2.  var sum = 2;
3.
4.  for (var i = 3; i <= num; i += 2) {
5.    var isPrime = true;
6.
7.    for (var j = 2; j <= Math.sqrt(i); j++) {
8.      if ((i % j) === 0) {
9.          isPrime = false;
10.      }
11.    }
12.    if (isPrime) 
13.      sum += i;
14.  }
15.
16.  return sum;
17.}
18.
19.sumPrimes(10);

 

posted @ 2017-05-25 16:36  water-moon  阅读(130)  评论(0编辑  收藏  举报