文章目录
💯前言
- 在计算机竞赛和线上评测中,第一次接触到一些关于质数的题目,经常会遇到质数判断和数学选择解法不充分优化并且越过时间限制的情况。本文将从一道关于质数的题目出发,细致分析题目的解法,对比我们的原始做法和老师提供的优化解法进行对比,并提出不同方向的扩展思考。通过这些分析,希望帮助读者更好地理解质数判断的实现,也能优化他们的解题能力。
C++ 参考手册
💯题目描述
这道题目来自洛谷平台,名为“B2085 第 n 小的质数”,请系统在此总结全问题。
题目内容
输入一个正整数 n n n,求正整数范围中第 n n n 小的质数。
输入格式
一个不超过 30000 的正整数 n n n。
输出格式
第 n n n 小的质数。
题目示例
输入
10
输出
29
💯原始做法分析
在初始解法中,我使用了一种直观但效率不高的做法:通过逐个检查每个数字是否是质数,计数第 n n n 个质数就结束。以下是原始代码:
#include <iostream>
using namespace std;
int main()
{
int n = 0;
cin >> n;
int count = 0;
int i = 2;
while (1)
{
int flag = 1;
for (int j = 2; j < i; j++)
{
if (i % j == 0)
{
flag = 0;
break;
}
}
if (flag)
count++;
if (count == n)
{
cout << i << endl;
break;
}
i++;
}
return 0;
}
解法源码解析
1. 步骤分析
- 通过定义变量
n
输入需求的第 n n n 个质数。 - 以
i=2
为起始,逐步检查每个数字是否为质数:- 通过完全逐环,从 2 2 2 到 i − 1 i-1 i−1 检查是否存在因数。
- 如果能被数 j j j 整除,则表明不是质数;否则计为质数。
- 如果质数计数达到