计算机专业新生咨询Java checkPrime素数判断方法运行逻辑
checkPrime() 方法的素数判断工作原理 整个方法的核心逻辑完全贴合素数的数学定义:大于1的自然数,除了1和它本身外不存在其他正因数,逐段拆解如下:
- 循环起点设置为
j=2:1是所有整数的公共因数,检测1的整除性没有任何意义,因此从最小的、可能成为其他数因数的整数2开始遍历。 - 循环终止条件设置为
j < num:num本身一定是自己的因数,如果遍历到j=num的位置,取余结果必然为0,会把所有数都误判为非素数,因此循环只需要覆盖所有比num小、比1大的整数范围即可。 - 核心判定逻辑为取余运算:每次循环计算
num % j,也就是num除以j后的余数。如果余数为0,说明j是num的正因数,num已经不符合素数的定义,这时候不需要继续遍历剩余的数字,直接返回false结束方法。 - 循环全量走完仍未触发返回
false的分支,说明2到num-1的所有整数都不能整除num,num满足素数的判定要求,直接返回true。
拿实际运行的场景举两个直观的例子:
- 当待检测数
num=7时:循环依次计算7%2=1、7%3=1、7%4=3、7%5=2、7%6=1,全程没有出现余数为0的情况,循环走完直接返回true,判定为素数。- 当待检测数
num=9时:循环先算9%2=1,继续执行到j=3时,9%3=0,直接触发返回false的分支,不需要再遍历后续j=4到j=8的数字,直接判定为非素数。
另外补充对应你代码里的特殊值处理:当待检测数是1的时候,由于j从2开始、j<1的循环条件根本不成立,循环会直接跳走返回true,但1本身不符合素数的定义,所以你在isPrime方法里加了i != 1的判断,把这个特殊的误判场景排除掉了,这也是整套代码可以正常输出正确素数列表的原因。
内容的提问来源于stack exchange,提问作者DH615
相关产品推荐
相关产品推荐

