-
素数定义
素数(质数):大于 1 的自然数,且只能被 1 和它本身整除(没有其他因数)。
最小的素数:2(唯一的偶数素数)
非素数(合数):大于 1 且能被除 1 和自身外的数整除的数
0、1:既不是素数也不是合数 -
素数判断核心逻辑
基础版:判断 2 ~ num-1 之间的数,是否能整除 num(效率低)
优化版:只需判断 2 ~ √num 之间的数(因数成对出现,超过平方根无需判断)
终极优化:偶数直接排除(除 2 外,所有偶数都不是素数),大幅减少循环次数 -
常见素数场景
判断单个数字是否为素数
输出指定范围内的所有素数
统计指定范围内素数的个数
判断单个素数、打印范围素数、统计素数个数的代码:
public class PrimeNumber {
public static void main(String[] args) {
// 1. 测试:判断单个数字是否为素数
int num = 29;
System.out.println(num + " 是否为素数:" + isPrime(num));// 2. 打印 2 ~ 100 之间的所有素数
int start = 2;
int end = 100;
System.out.println("\n" + start + " ~ " + end + " 之间的素数:");
printPrimeInRange(start, end);// 3. 统计 2 ~ 100 之间素数的个数
int count = countPrimeInRange(start, end);
System.out.println("\n" + start + " ~ " + end + " 之间的素数总数:" + count);
}/**
- 核心方法:判断一个数是否为素数(优化版,效率最高)
- @param num 待判断的数字
- @return true=素数,false=非素数
*/
public static boolean isPrime(int num) {
// 1. 小于等于1:不是素数
if (num <= 1) {
return false;
}
// 2. 等于2:唯一的偶数素数
if (num == 2) {
return true;
}
// 3. 偶数(除2外):直接不是素数
if (num % 2 == 0) {
return false;
}
// 4. 只需判断 3 ~ √num 之间的奇数(步长=2,跳过偶数)
for (int i = 3; i <= Math.sqrt(num); i += 2) {
if (num % i == 0) {
return false;
}
}
// 所有条件都满足:是素数
return true;
}
/**
- 打印指定范围内的所有素数
- @param start 起始值
- @param end 结束值
*/
public static void printPrimeInRange(int start, int end) {
for (int i = start; i <= end; i++) {
if (isPrime(i)) {
System.out.print(i + " ");
}
}
}
/**
-
统计指定范围内素数的个数
-
@param start 起始值
-
@param end 结束值
-
@return 素数数量
*/
public static int countPrimeInRange(int start, int end) {
int count = 0;
for (int i = start; i <= end; i++) {if (isPrime(i)) {
count++;
}
}
return count;
}
}
运行结果:

学习心得:
通过学习这段 Java 素数代码,我熟练掌握了素数的判断规则。学会通过排除偶数、遍历平方根优化循环,提升程序运行效率。同时理解了模块化编程思想,拆分功能方法,让代码整洁清晰、可复用性更强,收获颇丰。
