GESP 三级 · GESP 202412 C++ 三级 第 14 题

选择题 · 答案 C

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

题目

求小于等于 $N$ 的素数的方法中,有一种方法是将所有从 $2$ 到它本身减 $1$ 的数都除一遍,如果不能整除,就是素数。下列哪个程序,体现了这种方法( )?

A.

if(N >= 3){
    cout<<2<<endl;
    for(int i = 2; i <= N; i++){
        for(int j = 2; j < i; j++){
            if(i % j != 0){
                flag = 1;
            }
        }
        if(flag == 0){
            cout<<i<<endl;
        }
        flag = 0;
    }
}

B.

if(N > 2){
    for(int i = 3; i <= N; i++){
        for(int j = 2; j < i; j++){
            if(i % j == 0){
                flag = 1;
            }
        }
        if(flag == 0){
            cout<<i<<endl;
        }
        flag = 0;
    }
}

C.

if(N > 2){
    cout<<2<<endl;
    for(int i = 3; i <= N; i++){
        for(int j = 2; j < i; j++){
            if(i % j == 0){
                flag = 1;
            }
        }
        if(flag == 0){
            cout<<i<<endl;
        }
        flag = 0;
    }
}

D.

if(N > 2){
    cout<<2<<endl;
    for(int i = 3; i <= N; i++){
        for(int j = 2; j < i; j++){
            if(i % j == 0){
                flag = 1;
            }
        }
        if(flag == 0){
            cout<<i<<endl;
        }
    }
}
答案:C

解题思维

答案C。数组和位运算的代码追踪要特别小心:数组下标从0开始,位运算结果可能不直观。建议画图辅助。

常见错误

位运算追踪时建议把数字写成二进制形式再逐位计算。

详细解析(节选)

【考点】循环条件与边界判定|素数判定逻辑|flag标记与重置

1. 🎯 考纲定位

GESP 三级《算法基础》模块,考查核心能力:循环控制与布尔标志的协作使用。命题人卡住的是考生对"遍历所有除数"这一朴素逻辑的边界把握——很多人会写错循环终止条件,或者忘记重置标志导致后续判断全错。

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