质数判断需先处理n<2和n==2的边界情况,再用for循环从2遍历到√n试除,遇整除即return false,否则return true。

Java 中判断一个数是否为质数,核心是用流程控制语句(if、for、break)检查它是否**只有 1 和自身两个正因数**。关键在于合理设计循环范围和提前退出逻辑,避免无效计算。
基础逻辑:从 2 到 n-1 逐个试除
最直观的方式是让变量 i 从 2 遍历到 n-1,只要发现某个 i 能整除 n(即 n % i == 0),就说明 n 不是质数。
- 需单独处理边界情况:小于 2 的数(如 0、1)不是质数;2 是最小的质数。
- 一旦找到因子,立即用 break 或 return 结束检查,提升效率。
优化循环范围:只需检查到 √n
若 n 有大于 √n 的因子,必然对应一个小于 √n 的配对因子。因此循环上限设为 (int) Math.sqrt(n) 即可,大幅减少迭代次数。
- 注意:循环变量
i仍从 2 开始;√n 可能不是整数,强制转int向下取整是安全的。 - 例如判断 49:只需试 2~7,发现 7×7=49,立刻判定非质数(实际 49=7×7,不是质数)。
完整可运行示例代码
以下是一个带注释的静态方法,返回 boolean:
立即学习“Java免费学习笔记(深入)”;
public static boolean isPrime(int n) {
if (n < 2) return false; // 小于2不是质数
if (n == 2) return true; // 2是质数
if (n % 2 == 0) return false; // 偶数(除2外)都不是质数
// 只需检查奇数因子:从3开始,每次+2,上限为√n
for (int i = 3; i <= Math.sqrt(n); i += 2) {
if (n % i == 0) {
return false; // 找到因子,不是质数
}
}
return true; // 没找到因子,是质数
}
- 额外跳过所有偶数(除2外),进一步节省约一半循环次数。
- 调用时如
isPrime(17)返回true,isPrime(15)返回false。
常见易错点提醒
写质数判断时容易忽略这些细节:
- 忘记处理 n == 1 或 n :它们都不是质数,但常被漏判。
- 循环上限写成 i :导致低效甚至超时(尤其大数)。
- 没考虑 2 的特殊性:直接从 2 开始循环并排除偶数,会导致 2 被误判为非质数。
-
用 double 类型做循环变量:应统一用
int,避免浮点误差和类型转换问题。


















