GESP 五级 · GESP 202603 C++ 五级 第 5 题

选择题 · 答案 C

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

题目

下面代码实现了欧拉(线性)筛,横线处应填写( )。

vector<int> euler_sieve(int n) {
    vector<bool> is_composite(n + 1, false);
    vector<int> primes;

    for (int i = 2; i <= n; i++) {
        if (!is_composite[i])
            primes.push_back(i);

        for (int j = 0; _________________________ && (long long)i * primes[j] <= n; j++) {
            is_composite[i * primes[j]] = true;

            if (i % primes[j] == 0)
                break;
        }
    }
    return primes;
}
答案:C

解题思维

STL 容器:vector(动态数组)、set/map(红黑树,有序)、unordered_set/map(哈希表,无序)。注意迭代器失效问题。

常见错误

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

详细解析(节选)

【考点】线性筛|素数判定|数组边界控制

1. 🎯 考纲定位

GESP五级《C++程序设计》算法模块第3章"筛法求素数"。命题人卡住的是考生对线性筛核心逻辑的掌握——知道要筛,但不知道筛到什么程度。90%的考生会凭直觉选B(sqrt(n))或D(i),只有真正理解"每个合数只被其最小质因数筛一次"的人才能选对。

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