如何在JavaScript中不使用内置函数找出0-100的质数及排查代码问题
问题排查与正确实现
代码问题分析
你的代码存在两个核心问题:
- 质数判断逻辑错误:质数的因数只有1和自身,但你的内层循环从
i=2开始遍历到i=j,对于质数j,只有i=j时满足j%i==0,此时count的值为1,而你判断条件写的是count==2,导致永远不会触发质数计数,最终返回0(无输出大概率是运行环境的执行问题,正常情况下会输出0)。 - 未实现打印质数的需求:原代码仅统计数量,没有按照要求在控制台打印找到的质数。
正确实现方案
下面是修正后的代码,同时实现质数查找、计数和打印功能:
function countPrimes(num) { let primeCount = 0; // 遍历2到num的所有数(质数从2开始) for (let j = 2; j <= num; j++) { let isPrime = true; // 内层循环只需遍历到j的平方根,优化性能 for (let i = 2; i <= Math.sqrt(j); i++) { if (j % i === 0) { isPrime = false; break; // 找到因数,直接跳出循环,无需继续判断 } } if (isPrime) { primeCount++; console.log(j); // 打印找到的质数 } } return primeCount; } const total = countPrimes(100); console.log(`1到100之间的质数总数为:${total}`);
代码说明
- 用
isPrime标记位代替计数变量,逻辑更直观:默认假设当前数是质数,若找到能整除它的数则标记为非质数并跳出循环。 - 内层循环优化到
Math.sqrt(j):因为如果j有一个大于其平方根的因数,必然对应一个小于平方根的因数,这样能大幅减少循环次数,提升效率。 - 补充了质数打印逻辑,同时在最后输出质数总数,完全匹配需求。
内容的提问来源于stack exchange,提问作者Sheharyar Khan
相关产品推荐
相关产品推荐

