专栏文章
题解:P12138 [蓝桥杯 2025 省 A] 寻找质数
P12138题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mipn1rqo
- 此快照首次捕获于
- 2025/12/03 14:41 3 个月前
- 此快照最后确认于
- 2025/12/03 14:41 3 个月前
题意简化
正解思路
首先,如果给定一个正整数 ,能否直到它是否是一个质数呢?
显然,因为 ,所以 不是质数就是合数。
若 是一个合数(即 不是质数),则必存在正整数 ,使 。
不妨 ,则必有 。
因为 是正数,所以两边同乘 ,得:。
即:。
所以,如果 是一个合数,就必然存在一个正整数 ,满足 ,且使 (整除)。否则,即 是一个质数,那么就一定不存在这样的 了。
那么判断 是不是质数的方法就很明显了:尝试每一种 的可能即可。所以时间复杂度就是 。 但是问题求的是第 小的质数,不过思路也很明显了:从 开始一直往上枚举 ,并判断它是否是质数。直到第 个质数的时候就输出并结束程序即可。
那么,这个程序能否在规定时间内运行完毕呢?很简单,运行一下就好了——没有超时。
显然,因为 ,所以 不是质数就是合数。
若 是一个合数(即 不是质数),则必存在正整数 ,使 。
不妨 ,则必有 。
因为 是正数,所以两边同乘 ,得:。
即:。
所以,如果 是一个合数,就必然存在一个正整数 ,满足 ,且使 (整除)。否则,即 是一个质数,那么就一定不存在这样的 了。
那么判断 是不是质数的方法就很明显了:尝试每一种 的可能即可。所以时间复杂度就是 。 但是问题求的是第 小的质数,不过思路也很明显了:从 开始一直往上枚举 ,并判断它是否是质数。直到第 个质数的时候就输出并结束程序即可。
那么,这个程序能否在规定时间内运行完毕呢?很简单,运行一下就好了——没有超时。
代码
CPP#include <bits/stdc++.h>
using namespace std;
int n, p, cnt;
bool flag;
int main()
{
for(n = 2, flag; ; ++n) {
for(p = 2, flag = 0; p * p <= n; ++p) {
if(n % p == 0) {
flag = true;
break;
}
}
if(!flag) ++cnt;
if(cnt == 2025) {
cout << n;
return 0;
}
}
}
我的提交记录
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...