You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript质数查找函数对部分数值失效,求错误原因

问题分析与修复方案

你的代码有两个核心问题,导致33、35被错误判定为质数:

  1. 错误修改外层循环变量:在内部循环里执行i++会直接篡改外层for循环的计数器,导致部分数字跳过检查,同时把未经过完整验证的数字直接塞进质数数组。比如处理i=32时,内部循环发现32能被2整除,执行i++把i改成33,随后直接将33加入数组,但33从未被任何质数校验逻辑检查过。
  2. 缺少质数判定标记:无论当前数字是否被判定为合数,你都会强制将其加入质数数组,没有用变量跟踪当前数字的质数状态。

修复后的代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 19:20:01