下面是我的函数,总结了低于给定的所有素数maxNum。我不明白为什么函数中的 for 循环在使用instead ofisPrime时不起作用。j <= numj ** 2 <= numfunction sumPrimes(maxNum) { let sum = 0; for (let i = 2; i <= maxNum; i++) { if (isPrime(i)) { sum += i } } return sum}function isPrime(num) { for (let j = 2; j <= num; j++) { // when I use j ** 2 <= num it works if (num % j === 0) { return false } } return true}console.log(sumPrimes(20))
1 回答
鸿蒙传说
TA贡献1865条经验 获得超7个赞
如果您使用j <= num
,循环将计数j
到数字本身,然后匹配num % j === 0
并返回 false。
所以如果num
是 17,循环将执行17 <= 17
which passes 并且循环体执行17 % 17 === 0
,所以它总是返回 false,无论你传入什么数字。
您可以在循环头中使用j < num
instead of j <= num
,这也应该有效,因为使用小于号时永远不会达到数字本身。
添加回答
举报
0/150
提交
取消