文章

【GESP】C++二级真题 luogu-b3840, [GESP202306 二级] 找素数

GESP二级真题,多重分支嵌套/数学函数,难度★✮☆☆☆。

luogu-B3840 [GESP202306 二级] 找素数

题目要求

题目描述

小明刚刚学习了素数的概念:如果一个大于 $1$ 的正整数,除了 $1$ 和它自身外,不能被其他正整数整除,则这个正整数是素数。现在,小明想找到两个正整数 $A$ 和 $B$ 之间(包括 $A$ 和 $B$)有多少个素数。

输入格式

输入只有一行两个正整数 $A, B$。约定 $2 \le A \le B \le 1000$。

输出格式

输出一行,包含一个整数 $C$,表示找到 $C$ 个素数。

样例输入 #1

1
2 10

样例输出 #1

1
4

样例输入 #2

1
98 100

样例输出 #2

1
0

提示

【样例解释 1】

在 $2$ 和 $10$ 之间有 $4$ 个素数,分别为:$2$、$3$、$5$、$7$。


题目分析

我们可以使用两层循环,外层循环遍历所有的数,内层循环判断每个数是否为素数。如果一个数能被2到它的平方根之间的任何数整除,那么它就不是素数。

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <cmath>
#include <iostream>

using namespace std;
int main() {
    int a, b; // 定义两个整数变量a和b
    cin >> a >> b; // 从输入流中读取a和b的值
    int ans = 0; // 初始化答案变量ans为0

    for (int i = a; i <= b; i++) { // 从a到b遍历所有数
        bool flag = true; // 初始化标志变量flag为true,表示i是否为素数
        for (int j = 2; j <= sqrt(i); j++) { // 从2到i的平方根遍历所有可能的因数
            if (i % j == 0) { // 如果i能被j整除
                flag = false; // 则i不是素数,设置flag为false
                break;
            }
        }
        if (flag) { // 如果i是素数
            ans++; // 则答案加1
        }
    }
    cout << ans; // 输出答案
    return 0; // 返回0,表示程序执行成功
}

所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code

GESP各级别考纲要点、知识拓展和练习题目清单详见C++学习项目主页

luogu-”系列题目已加入洛谷Java、C++初学团队作业清单,可在线评测,团队名额有限,欢迎加入。

bcqm-”系列题目可在编程启蒙题库进行在线评测。

本文由作者按照 CC BY 4.0 进行授权