题目解析
* 输入输出:输入两个正整数 AAA 和 BBB,表示闭区间 [A,B][A, B][A,B];输出该区间内素数的个数 CCC。
* 数据范围:2≤A≤B≤10002 \leq A \leq B \leq 10002≤A≤B≤1000,区间长度不超过 100010001000,数值规模较小。
* 复杂度要求:时间复杂度 O((B−A+1)⋅B)O\left((B-A+1) \cdot \sqrt{B}\right)O((B−A+1)⋅B ),最坏情况约 3×1043 \times 10^43×104 次运算;空间复杂度 O(1)O(1)O(1)。
* 算法知识点:素数判定、试除法、区间枚举
思路解析
1. 素数判定(试除法):对于待判定整数 xxx,只需检查 222 到 x\sqrt{x}x 之间是否存在因子。若存在则 xxx 为合数,否则为素数。代码中使用 i * i <= x 避免浮点开方运算,提升效率并保证精度。
2. 区间遍历:在 [A,B][A, B][A,B] 范围内逐个枚举整数,对每个数调用判定函数,统计返回 true 的次数。
3. 边界处理:题目保证 A≥2A \geq 2A≥2,无需处理 111 的特殊情况;判定函数从 222 开始枚举,自然排除 111 的干扰。
完整代码