Problem:
Score: 300 points

Problem Statement

Find the minimum prime number greater than or equal to X.

Notes

A prime number is an integer greater than 1 that cannot be evenly divided by any positive integer except 1 and itself.

For example, 2, 3, and 5 are prime numbers, while 4 and 6 are not.

Constraints

2 \le X \le 10^5

All values in input are integers.

Input

Input is given from Standard Input in the following format:

X

Output

Print the minimum prime number greater than or equal to X.

Sample Input 1

20

Sample Output 1

23

The minimum prime number greater than or equal to 20 is 23.

Sample Input 2

2

Sample Output 2

2

X itself can be a prime number.

Sample Input 3

99992

Sample Output 3

100003

Solution in Rust (1.15.1) (judge verdict: Accepted)

use std::io::Read;

fn main() {
    let mut buf = String::new();
    std::io::stdin().read_to_string(&mut buf).unwrap();

    let answer = solve(&buf);

    println!("{}", answer);
}

fn solve(input: &str) -> String {
    let mut iterator = input.split_whitespace();

    let mut x: usize = iterator.next().unwrap().parse().unwrap();

    if x == 2 {
        return String::from("2")
    }

    if x % 2 == 0 {
        x += 1
    }

    loop {
        if is_prime(x) {
            return x.to_string();
        }
        x += 2;
    }
}

fn is_prime(x: usize) -> bool {
    let mut n = 3;

    while n < x / 2 {
        if x % n == 0 {
            return false;
        }
        n += 2;
    }
    return true;
}


#[test]
fn test() {
    assert_eq!(
        solve(
            r"20"
        ),
        "23"
    );
    assert_eq!(
        solve(
            r"2"
        ),
        "2"
    );
    assert_eq!(
        solve(
            r"99992"
        ),
        "100003"
    );
}