FreeCodeCamp筆記之:Sum All Primes

题目

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

思路

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

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


FreeCodeCamp筆記之:Sum All Primes_第2张图片
图片发自App

FreeCodeCamp筆記之:Sum All Primes_第3张图片
图片发自App
  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
  • 经验证,脚本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)