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
相关产品推荐
相关产品推荐

