JavaScript统计1-60范围内质数总数的代码错误排查
问题分析与代码修复方案
现有代码错误原因
- 内层循环逻辑无终止:判断到数字能被整除后没有跳出循环,会继续执行后续遍历逻辑,导致同一个数字多次输出结果
- 输出与计数逻辑位置错误:将「是质数」的输出和计数逻辑写在了内层循环中,每遍历一次j就执行一次,出现重复计数、重复输出的问题
- 边界值未处理:质数的定义是大于1的自然数,1本身不属于质数,现有代码没有过滤i=1的场景
- 无合数标记逻辑:确认数字是合数后没有做标记,后续j的遍历仍然会重复判断,输出错误结果
修复后的完整代码
var totalPrimeNumber = 0; // 直接从2开始遍历,排除1这个非质数 for(let i = 2; i <= 60; i++) { let isPrime = true; // 先默认当前数字为质数 for(let j = 2; j < i; j++) { if(i % j == 0) { isPrime = false; // 能被整除说明是合数 break; // 确认是合数后直接跳出内层循环,不需要继续判断 } } // 内层循环全部遍历完成后,再统一输出结果、做计数 if(isPrime) { console.log(i, "is a prime number"); totalPrimeNumber += 1; } else { console.log(i, "is not a prime number"); } } console.log("1到60的质数总数为:", totalPrimeNumber);
可选优化方案
如果要提升运行效率,内层循环的终止条件可以改为j <= Math.sqrt(i),因为如果i存在大于其平方根的因数,对应的另一个因数一定小于它的平方根,不需要重复遍历判断。
内容的提问来源于stack exchange,提问作者An Chi Lê
相关产品推荐
相关产品推荐

