JavaScript质数查找函数对部分数值失效,求错误原因
问题分析与修复方案
你的代码有两个核心问题,导致33、35被错误判定为质数:
- 错误修改外层循环变量:在内部循环里执行
i++会直接篡改外层for循环的计数器,导致部分数字跳过检查,同时把未经过完整验证的数字直接塞进质数数组。比如处理i=32时,内部循环发现32能被2整除,执行i++把i改成33,随后直接将33加入数组,但33从未被任何质数校验逻辑检查过。 - 缺少质数判定标记:无论当前数字是否被判定为合数,你都会强制将其加入质数数组,没有用变量跟踪当前数字的质数状态。
修复后的代码
function primeFinder(n) { const primes = []; for (let i = 2; i <= n; i++) { let isPrime = true; const root = Math.floor(Math.sqrt(i)); for (let j = 2; j <= root; j++) { if (i % j === 0) { isPrime = false; break; } } if (isPrime) { primes.push(i); } } return primes; } console.log(primeFinder(35)); // 输出: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]
修复说明
- 新增
isPrime变量,初始默认当前数字是质数,通过内部循环校验后更新状态。 - 移除对外层循环变量
i的修改,确保每个数字都能被完整检查。 - 只有当
isPrime保持true(即未找到任何因数)时,才将数字加入质数数组。 - 用
push()替代手动维护index,代码更简洁易读。
内容的提问来源于stack exchange,提问作者yasser fahmi
相关产品推荐
相关产品推荐

