GESP 二级 · GESP 202412 C++ 二级 第 13 题

选择题 · 答案 B

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

题目

下面 C++ 代码用于输出 $N$ 和 $M$ 之间(可以包括 $N$ 和 $M$)的孪生素数。孪生素数是指间隔为 $2$ 的两个数均为素数,如 $11$ 和 $13$ 分别是素数,且间隔为 $2$。isPrime(N) 用于判断 $N$ 是否为素数的函数。为完成上述功能,横线处应填上的代码是( )。

int N, M;

// 本题假设 N 小于 M
cin >> N >> M;

for (int i = N; i < __________; i++)
    if (isPrime(i) && isPrime(i + 2))
        printf("%d %d\n", i, i + 2);
答案:B

解题思维

答案B。循环补全要分析循环变量的初始值、条件和更新方式,确保能产生目标输出。

常见错误

代入法验证时注意选项之间的细微差别。循环条件中的<和<=可能导致完全不同的结果。

详细解析(节选)

【考点】循环边界控制|素数判断逻辑

解题思路必须紧扣题目要求的区间范围。孪生素数对 (i, i+2) 中的 i+2 必须落在 [N, M] 内,即 i+2 ≤ M,等价于 i ≤ M-2。for 循环的终止条件是 i < 某值,若填 M-2,循环会在 i=M-3 时停止,漏掉 i=M-2 这一对(此时 i+2=M,仍在范围内)。只有填 M-1,循环条件 i < M-1 才会在 i=M-1 时停止,保证 i+2 ≤ M 的所有 i 都被遍历到。

命题人设下的经典陷阱在于对"区间包含"的理解偏差。选项 A 看似更紧,实则漏掉边界;选项 C 和 D 会让 i+2 超出 M,却因循环条件宽松而多输出。很多考生只盯着"i 要小于 M",却忽略了 i+2 这个"隐式变量"的取值范围,这是二级 C++ 最常见的坑。

反命题视角:若题目要求输出 (i, i+2) 且 i+2 也在 [N, M] 内,循环条件应改为 i < M-1;若要求 i 和 i+2 都在 [N, M] 内,则需 i < M-1;若要求输出所有孪生素数对,其中 i+2 也在 [N, M] 内,循环条件应改为 i < M-1。

一句话提醒:遇到循环边界题,先画出变量取值范围,再对照终止条件,别被"看起来合理"的选项带偏。

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