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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 20:55:14