GESP 五级 · GESP 202409 C++ 五级 第 6 题

选择题 · 答案 A · 考点:循环控制

← 整套速查表 GESP 五级 全部真题

题目

下述代码实现素数表的线性筛法,筛选出所有小于等于 $n$ 的素数,则横线上应填的代码是( )。

vector<int> sieve_linear(int n) {
    vector<bool> is_prime(n + 1, true);
    vector<int> primes;

    for (int i = 2; i <= n / 2; i++) {
        if (is_prime[i])
            primes.push_back(i);
        ______________________ {  // 在此处填入代码
            is_prime[i * primes[j]] = 0;
            if (i % primes[j] == 0)
                break;
        }
    }

    for (int i = n / 2 + 1; i <= n; i++) {
        if (is_prime[i])
            primes.push_back(i);
    }

    return primes;
}
答案:A

考点

循环控制

解题思维

埃氏筛法:从2开始标记倍数为合数,O(n log log n)。线性筛(欧拉筛):每个合数只被最小质因子标记一次,O(n)。线性筛效率更高。

常见错误

填空时注意语法完整性:分号、括号匹配、函数参数类型和个数、返回值类型。

详细解析(节选)

【考点】线性筛(欧拉筛)|素数筛法|循环控制

1. 🎯 考纲定位

GESP 五级算法模块「筛法」第 2 级考点。命题人刻意用线性筛考细节——绝大多数考生背过埃氏筛,但线性筛的「每个合数只被最小质因子筛一次」这一核心逻辑,在实现中极易出 bug。

同考点真题

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断