2021-2022-2 ACM集训队每周程序设计竞赛(10) - 问题 C: 下一个素数 - 题解
Posted Tisfy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021-2022-2 ACM集训队每周程序设计竞赛(10) - 问题 C: 下一个素数 - 题解相关的知识,希望对你有一定的参考价值。
传送门
下一个素数
时间限制:1秒
空间限制:128M
题目描述
小T说:请找到不小于T的最小的素数
素数是除了1和自身外不能被其他整数整除的大于1的正整数
输入描述
输入包括一行一个正整数T
2 ≤ T ≤ 1 0 5 2\\leq T\\leq 10^5 2≤T≤105
输出描述
输出一行一个正整数,代表不小于T的最小素数
样例一
输入
20
输出
23
样例二
输入
99992
输出
100003
样例三
输入
2
输出
2
题目分析
只要从T开始不断尝试,总能找到下一个素数。
1 0 5 10^5 105 的下一个素数是 100003 100003 100003,因此用 O ( n ) O(\\sqrtn) O(n) 的复杂度去找素数的话不会超时。
n \\sqrtn n 复杂度求素数
用一个变量 i i i 从 2 2 2 到 n \\sqrtn n 枚举,如果 n n n 能整除某个 i i i,那么就说明 n n n 不是素数。
否则就说明 n n n 是素数。
因为如果 a × b = n a\\times b=n a×b=n,那么总有 a ≤ n a\\leq \\sqrtn a≤n 或 b ≤ n b\\leq \\sqrtn b≤n
AC代码
#include <bits/stdc++.h>
using namespace std;
#define mem(a) memset(a, 0, sizeof(a))
#define dbg(x) cout << #x << " = " << x << endl
#define fi(i, l, r) for (int i = l; i < r; i++)
#define cd(a) scanf("%d", &a)
typedef long long ll;
bool prime(int n)
for (int i = 2; i <= sqrt(n); i++)
if (n % i == 0)
return false;
return true;
int main()
int n;
cin >> n;
while (!prime(n))
n++;
cout << n << endl;
return 0;
点关注,不迷路
创作打卡挑战赛 赢取流量/现金/CSDN周边激励大奖原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/124561332
以上是关于2021-2022-2 ACM集训队每周程序设计竞赛(10) - 问题 C: 下一个素数 - 题解的主要内容,如果未能解决你的问题,请参考以下文章
2021-2022-2 ACM集训队每周程序设计竞赛(13)题解
2021-2022-2 ACM集训队每周程序设计竞赛(13)题解
2021-2022-2 ACM集训队每周程序设计竞赛(13)题解