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

给定数字的下一个更大质数求解:代码错误排查及修正

排查JavaScript下一个更大质数代码的错误及修正

问题描述

我编写了一段JavaScript代码,用于查找给定数字的下一个更大质数,逻辑是将输入数字逐步递增并逐个检查是否为质数,但实际运行输出与预期结果不符。

错误代码示例

function findNextPrime(num) {
  let nextNum = num;
  while (true) {
    if (isPrime(nextNum)) {
      return nextNum;
    }
    nextNum++;
  }
}

function isPrime(n) {
  if (n <= 1) return false;
  for (let i = 2; i < n; i++) {
    if (n % i === 0) {
      return false;
    }
  }
  return true;
}

// 测试情况
console.log(findNextPrime(11)); // 预期输出13,实际输出11

错误分析

  1. 起始检查值错误:findNextPrime中nextNum初始化为输入的num,而需求是找下一个更大的质数,当输入本身就是质数时,会直接返回输入值,不符合预期。
  2. 质数检查效率低下:isPrime的循环范围是i < n,无需遍历到n-1,因为若n存在大于其平方根的因数,必然对应一个小于平方根的因数,这样的写法会做很多无用功。

修正后的代码

function findNextPrime(num) {
  let nextNum = num + 1;
  while (true) {
    if (isPrime(nextNum)) {
      return nextNum;
    }
    nextNum++;
  }
}

function isPrime(n) {
  if (n <= 1) return false;
  if (n === 2) return true;
  if (n % 2 === 0) return false;
  // 仅检查奇数,循环到平方根即可
  for (let i = 3; i <= Math.sqrt(n); i += 2) {
    if (n % i === 0) {
      return false;
    }
  }
  return true;
}

// 验证测试
console.log(findNextPrime(10)); // 输出11(符合预期)
console.log(findNextPrime(11)); // 输出13(符合预期)
console.log(findNextPrime(1)); // 输出2(符合预期)
console.log(findNextPrime(2)); // 输出3(符合预期)

修正说明

  • 调整nextNum初始值为num + 1,确保从输入数字的下一个数开始检查,满足“下一个更大质数”的核心需求。
  • 优化isPrime函数:
    • 单独处理2(唯一的偶质数),直接返回结果;
    • 排除所有大于2的偶数,减少无效检查;
    • 循环仅遍历奇数且上限设为Math.sqrt(n),在不影响正确性的前提下大幅提升效率。

内容的提问来源于stack exchange,提问作者Ali

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 21:50:37