题目
编写一个独立的判素函数 is_prime,在主程序中遍历指定范围 [2, n],批量输出该范围内的所有素数。
输入格式:一行输入一个正整数 n(n ≥ 2)。
输出格式:按升序输出 2 到 n 之间的所有素数,以空格分隔,末尾换行。
数据范围与约定:2 ≤ n ≤ 2000。
思路与算法
1. 逻辑分层解耦
将素数判定提炼为纯函数 int is_prime(int x),主程序只关注区间循环调度与输出排版,极大降低代码复杂度。
2. 试除法优化
函数内部对每个数检验 i * i ≤ x,保证单次检验复杂度为 O(√x)。
完整程序
#include <stdio.h>
// 函数封装:将“判断单个数是否为素数”抽离为独立函数,降低耦合
static int is_prime(int n)
{
if (n < 2) {
return 0;
}
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) {
return 0;
}
}
return 1;
}
int main(void)
{
int a, b;
if (scanf("%d %d", &a, &b) != 2) {
return 1;
}
for (int i = a; i <= b; i++) {
if (is_prime(i)) {
printf("%d\n", i);
}
}
return 0;
}运行示例
输入:
2 10输出:
2
3
5
7