1. GESP二级编程题"数数"解析与实现
作为一名参加过多次GESP考级的选手,我深知编程题是二级考试中最能拉开分数的部分。今天我们就来详细拆解2026年3月GESP二级C++考试的第一道编程题"数数",这道题看似简单,但想要拿到满分还是需要掌握一些技巧的。
1.1 题目理解与需求分析
根据真题描述,题目要求我们编写一个程序,能够统计给定数字范围内满足特定条件的数字个数。具体来说:
- 输入两个正整数a和b(a ≤ b),表示数字范围
- 统计在[a,b]区间内所有满足以下条件之一的数字:
- 数字的各位数字之和是质数
- 数字本身是质数
- 输出满足条件的数字个数
注意:题目中1不被视为质数,这是很多同学容易忽略的细节。在数学定义中,质数是指大于1的自然数,除了1和它本身外没有其他约数。
1.2 解题思路设计
要解决这个问题,我们需要分几个步骤来实现:
- 输入处理:读取两个整数a和b,确保a ≤ b
- 遍历数字:对[a,b]区间内的每个数字进行检查
- 条件判断:
- 判断数字本身是否为质数
- 计算数字各位之和,判断该和是否为质数
- 统计结果:记录满足任一条件的数字个数
- 输出结果:打印最终的统计结果
这个问题的关键在于如何高效地实现质数判断和数字各位求和这两个核心功能。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心算法实现细节
2.1 质数判断算法
质数判断是本题的核心之一。一个直观的方法是试除法:对于数字n,检查从2到√n的所有整数是否能整除n。
cpp复制bool isPrime(int n) {
if (n <= 1) return false; // 1不是质数
if (n == 2) return true; // 2是最小的质数
if (n % 2 == 0) return false; // 排除偶数
for (int i = 3; i * i <= n; i += 2) {
if (n % i == 0) {
return false;
}
}
return true;
}
这个算法的时间复杂
