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声明,会成为全局变量,可能引发其他意外问题。
修正后的实现思路
- 先写一个独立的质数判断函数,专门用于检查某个数是否为质数。
- 从输入的数字开始,逐个检查每个数是否为质数,直到找到第一个符合要求的质数为止。
修正后的代码
// 定义质数判断函数 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
相关产品推荐
相关产品推荐

