题目

编写一个独立的判素函数 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