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

Java质数查找循环疑问:i=1时为何未进入循环?请求代码推演

质数判断代码问题分析与推演

先把你给出的代码贴出来:

if(n==2) { 
    return true;
} 

for(int i=1;i<=Math.sqrt(n);i++){
    if(n % i == 0){
        return false;
    }
}
return true;

你说“循环未执行”其实是误解——循环不是没执行,而是第一次迭代就直接触发return false跳出了整个函数,根本没机会走后续循环步骤。下面分不同情况推演:

  • 当n=2时:
    代码会先触发if(n==2)的判断,直接返回true,不会进入for循环。这部分逻辑是对的。

  • 当n>2时(比如n=3,质数):
    Math.sqrt(3)约等于1.732,循环条件i<=1.732成立,i从1开始进入循环。然后判断3%1==0,结果为真,直接执行return false,函数结束。但3明明是质数,这就导致了错误的判断。

  • 当n=4(合数):
    Math.sqrt(4)=2,i=1进入循环,4%1==0成立,直接return false。虽然结果是对的(4确实不是质数),但逻辑完全错误——它是因为1能整除4才返回false,而不是因为4有其他约数。

  • 当n=1(非质数):
    不会触发n==2的判断,进入循环后i=1<=1,1%1==0成立,return false。结果正确,但逻辑依然错误。

问题的核心在于:1是所有正整数的约数,只要循环从i=1开始,任何n≥1(除了n=2被提前拦截)都会在第一次循环就触发n%i==0,直接返回false,完全达不到判断质数的目的。

正确的逻辑应该是从i=2开始循环,检查到Math.sqrt(n),这样就能判断n是否存在除了1和自身之外的其他约数,符合质数的定义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 14:48:17