如果正整数 $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。先分析已有代码的功能,确定输出目标,再反推横线处需要的代码。可用代入法验证。
将每个选项代入横线处验证是最可靠的方法。注意代码的完整逻辑和输出格式。
【考点】循环控制|素数判定|边界条件
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) 反命题思维: