题目
从标准输入读入两个正整数 a 和 b(保证 a ≤ b),输出闭区间 [a, b] 内的所有素数。
输入格式:一行输入两个正整数 a 和 b,以空格分隔。
输出格式:按升序输出区间内的所有素数,每行输出一个,末尾换行。若区间内无素数则不输出。
数据范围与约定:1 ≤ a ≤ b ≤ 10000。
思路与算法
1. 区间遍历与判素模块化
外层循环遍历区间 [a, b] 中的每个整数 x,内层调用素数判定逻辑。将判素逻辑封装为独立函数 is_prime(int n) 使主程序结构清晰。
2. 性能考量
在 b ≤ 10000 规模下,单数试除法耗时极少;若区间扩展到 106 以上,可换用埃拉托斯特尼筛法(埃氏筛)。
完整程序
import java.util.Scanner;
public class Main {
// 单独抽离判素方法:小于 2 不是素数,试除到 √n
static boolean isPrime(int n) {
if (n < 2) {
return false;
}
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
// 遍历闭区间 [a, b] 逐个筛选素数
for (int i = a; i <= b; i++) {
if (isPrime(i)) {
System.out.println(i);
}
}
}
}运行示例
输入:
10 20输出:
11
13
17
19