GESP 一级 · GESP 202606 C++ 一级 第 15 题

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

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

题目

如果正整数 $N$ 只能被 $1$ 和它本身整除,则它是一个质数(或素数)。下面的 C++ 代码用于判断正整数 $N$ 是否为质数(素数)。若 $N$ 是质数,输出 YES,否则输出 NO。横线处不应填入的代码是( )。

int N, i;
cin >> N;
if (N <= 1) {
    cout << "NO";
    return 0;
}
for (i = 2; ______; i++) {
    if (N % i == 0) {
        cout << "NO";
        return 0;
    }
}
cout << "YES";
答案:B

考点

循环控制

解题思维

答案B。先分析已有代码的功能,确定输出目标,再反推横线处需要的代码。可用代入法验证。

常见错误

将每个选项代入横线处验证是最可靠的方法。注意代码的完整逻辑和输出格式。

详细解析(节选)

【考点】循环控制|素数判定|边界条件

1) 考纲定位:GESP一级"循环控制"模块的核心题。命题人卡住的是"循环终止条件与质数定义的关系"——很多考生只会写 i < N 或 i <= N,却不懂为什么 i <= N 会漏判合数。

2) 解题思维:

* i < N:当 i = N 时停止,漏掉检查 i = N 这一位置;但 N 本身是"自身",检查 N % N == 0 是必然成立的,所以即使不检查 N 也不会误判。 * i <= N:会检查 i = N 这一位置,N % N == 0 必然为真,于是提前输出 NO,把所有数都判定为合数。 * i <= N / 2:只检查到 N/2,因为若存在因子 i > N/2 且 i < N,则对应的 N/i < 2,不可能。所以足够。 * i*i <= N:只需检查到 sqrt(N),因为若有因子 i > sqrt(N),则必有因子 N/i < sqrt(N),早已被检查过。最优化。

3) 陷阱拆解:

4) 反命题思维:

同考点真题

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