GESP C++ 真题 · 逐题精解
首页C++五级真题 › 2026年6月 › 第5题

GESP 2026年6月 C++五级 单选题 第5题

C++五级单选题2026年6月第5题

所属知识点:综合应用(跨题型) 难度要求:掌握 考频:—

下面代码实现线性筛(欧拉筛),以筛选出 n 以内的所有素数。横线处的代码应为( )。
vector<int> sieve(int n) {
    vector<bool> is_prime(n + 1, true);
    vector<int> primes;
    if (n >= 0) is_prime[0] = false;
    if (n >= 1) is_prime[1] = false;
    for (int i = 2; i <= n; ++i) {
        if (is_prime[i]) primes.push_back(i);
        for (int j = 0; j < primes.size() && i * primes[j] <= n; j++) {
            is_prime[i * primes[j]] = false;
            if (______________) break;  // 在此处填入代码
        }
    }
    return primes;
}

正确答案:A

题目解析
线性筛保证每个合数只被它的「最小质因子」筛一次:当 i 能被 primes[j] 整除(i % primes[j] == 0)时,再往后的质数都不是 i*primes[j] 的最小质因子,必须 break,选 A。💡 这一句是欧拉筛实现 O(n) 的关键,缺了它就退化成普通筛。

想系统刷完 GESP C++ 1~8 级真题,并查看每道题的逐题精讲?

进入 GESPPASS 开始练习