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

GESP 2026年6月 C++八级 单选题 第13题

C++八级单选题2026年6月第13题

所属知识点:各类算法复杂度 难度要求:掌握 考频:中频

下列线性筛的代码片段中,当枚举到质数 p 且 i % p == 0 时,使用 break; 语句停止继续枚举。这样做的主要目的是( )。
for (int i = 2; i <= n; ++i) {
    if (!is_composite[i])
        primes.push_back(i);
    for (int p : primes) {
        if (i * p > n)
            break;
        is_composite[i * p] = true;
        if (i % p == 0)
            break;   // 这条语句的目的是?
    }
}

正确答案:B

题目解析
当 i % p == 0 时,p 是 i 的最小质因子;再往后用更大的质数去筛 i*p′ 就会重复(那些合数应由它们自己的最小质因子筛)。break 保证每个合数只被其最小质因子筛恰好一次,从而做到 O(n) 线性,选 B。💡 这正是线性(欧拉)筛区别于埃氏筛、达到 O(n) 的关键。

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

进入 GESPPASS 开始练习