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 2T105


输出描述

输出一行一个正整数,代表不小于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 an b ≤ n b\\leq \\sqrtn bn


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;

点关注,不迷路

原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/124561332

创作打卡挑战赛 赢取流量/现金/CSDN周边激励大奖

以上是关于2021-2022-2 ACM集训队每周程序设计竞赛(10) - 问题 C: 下一个素数 - 题解的主要内容,如果未能解决你的问题,请参考以下文章

2021-2022-2 ACM集训队每周程序设计竞赛题解

2021-2022-2 ACM集训队每周程序设计竞赛(13)题解

2021-2022-2 ACM集训队每周程序设计竞赛(13)题解

2021-2022-2 ACM集训队每周程序设计竞赛(13)题解

2021-2022-2 ACM集训队每周程序设计竞赛 - 问题 C:回到学校 - 题解

2021-2022-2 ACM集训队每周程序设计竞赛(10) - 问题 C: 下一个素数 - 题解