文章

【GESP】C++二级练习 luogu-B2085, 第 n 小的质数

GESP二级练习,多层循环分支嵌套练习,难度★✮☆☆☆。

luogu-B2085 第 n 小的质数

题目要求

题目描述

输入一个正整数 $n$,求正整数范围中第 $n$ 小的质数。

输入格式

一个不超过 $30000$ 的正整数 $n$。

输出格式

第 $n$ 小的质数。

样例输入 #1

1
10

样例输出 #1

1
29

题目分析

首先,我们需要一个变量来存储输入的正整数 $n$,表示我们要找的第 $n$ 小的质数。 然后,我们从2开始,依次判断每个数是否为质数,直到找到第 $n$ 个质数为止。

判断一个数是否为质数,可以通过检查它是否有除1和自身以外的因数来实现。

  • 如果一个数有除1和自身以外的因数,那么它就不是质数。
  • 如果一个数没有除1和自身以外的因数,那么它就是质数。
  • 最后,我们输出找到的第 $n$ 个质数。

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#include <cmath>
using namespace std;
int main() {
    int n; // 输入的正整数
    cin >> n; // 读取输入的正整数
    for (int i = 2;; i++) { // 从2开始,循环直到找到第n个质数
        bool flag = true; // 初始化标志为真,表示i可能是质数
        if (i == 2) {
            flag = true; // 2是质数
        } else {
            for (int j = 2; j <= sqrt(i); j++) { // 检查i是否有除1和自身以外的因数
                if (i % j == 0) {
                    flag = false; // 如果i有除1和自身以外的因数,则不是质数
                    break; // 跳出循环
                }
            }
        }
        if (flag) { // 如果i是质数
            n--; // 计数减1
            if (n == 0) { // 如果计数为0,则i是第n个质数
                cout << i; // 输出第n个质数
                break; // 跳出循环
            }
        }
    }
    return 0;
}

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

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

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

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

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