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

JavaScript质数判断与下一个质数查找:代码无限循环问题求助

问题分析与代码修正

原代码的核心问题

  • 无限循环的直接原因:循环条件是i<=a,但你在循环里遇到非质数时会执行a++,导致a不断变大,循环的终止条件永远无法满足。比如输入38,第一次i=2时,38%2=0,a变成39,此时i还是2,2<=39依然成立;后续i增加到3时,39%3=0,a又变成40,循环会一直持续下去。
  • 质数判断逻辑完全错误:你现在的逻辑是只要a%i!=0就打印"Prime",但质数需要满足所有小于它的正整数(除了1和自身)都不能整除它,而不是只要有一个数不能整除就判定为质数。
  • 变量未声明:i没有用let/var/const声明,会成为全局变量,可能引发其他意外问题。

修正后的实现思路

  1. 先写一个独立的质数判断函数,专门用于检查某个数是否为质数。
  2. 从输入的数字开始,逐个检查每个数是否为质数,直到找到第一个符合要求的质数为止。

修正后的代码

// 定义质数判断函数
function isPrime(num) {
    // 小于2的数不是质数
    if (num < 2) return false;
    // 遍历到num的平方根即可,优化性能
    for (let i = 2; i <= Math.sqrt(num); i++) {
        if (num % i === 0) {
            return false;
        }
    }
    return true;
}

function findNextPrime(a) {
    let currentNum = a;
    while (true) {
        if (isPrime(currentNum)) {
            console.log(currentNum);
            return currentNum;
        }
        currentNum++;
    }
}

// 测试
findNextPrime(38); // 输出41

代码说明

  • isPrime函数负责判断单个数字是否为质数,通过遍历到平方根来减少不必要的计算,提升效率。
  • findNextPrime函数从输入数字开始逐个检查,找到质数后立即返回,不会出现无限循环问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 18:16:37