FreeCodeCamp筆記之:Sum All Primes

作者: delphuy | 来源:发表于2017-10-20 11:50 被阅读20次

    题目

    求小于等于给定数值的质数之和。
    只有 1 和它本身两个约数的数叫质数。例如,2 是质数,因为它只能被 1 和 2 整除。1 不是质数,因为它只能被自身整除。
    给定的数不一定是质数。
    如果你被卡住了,记得开大招 Read-Search-Ask。尝试与他人结伴编程、编写你自己的代码。
    这是一些对你有帮助的资源:
    For Loops
    Array.push()

    思路

    1. 看提示 是要用上 for循环,和 push函数;
    2. 先读懂题目,说实话我并不记得神马是质数(输入法都翻了好多页),请原谅一个高考数学只70多分的人;
    3. 看题目下方的验证:
    image.png

    还是不是很明白要做什么,我特意在纸上画了画


    FreeCodeCamp筆記之:Sum All Primes
    FreeCodeCamp筆記之:Sum All Primes
    1. 瞬间清晰了很多,思路是从i=2开始(毕竟最小的质数是2)一直循环到num;然后嵌套一个子循环,j 小于< i;当i %j = 0 说明i 除了1和本身还有数能除进,则当前的j 不是质数,需要从判断的数 中减掉;
    2. 不过还是想到一个问题,因为如果num 足够大,i <= num 的for循环可能会超时?
    3. 暂时还想不到其他的好的解法,先写一个出来

    解答

    function sumPrimes(num) {
     var i=2;                      //因为最小的质数是2,所以初始值设定为2;
     var arr = 0;                  //定义一个变量来记录质数相加的和
     if (num <=2 ){                // 如果num 小于等于2,则直接结束;
        arr = 0; 
     } 
      while (i<=num){              //开始循环
         for (var j=2;j<i;j++){  
           if(i%j === 0){          //开始子循环,判断小于i且大于2的 的数字是否都能被i整除
             arr -= i;             // 如果能被整除,说明i不是质数,需减掉
             break;                //循环结束
           }  
         }
         arr += i;                 //将是质数的i 加入到结果变量
         i++;
      } 
       return arr;  
    }
    sumPrimes(10);
    
    • 经验证,脚本OK;
    • 不过仍然有担心比如 num过大会报错,经验证num 大于8600时就会报错:

    as the first line. Beware that if you do have an infinite loop in your code this will crash your browser.

    • 再找找看有无更高效的算法;

    相关文章

      网友评论

        本文标题:FreeCodeCamp筆記之:Sum All Primes

        本文链接:https://www.haomeiwen.com/subject/cqwmuxtx.html