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 Go (1.6) (judge verdict: Accepted)

package main

import "fmt"

func merge(m1, m2 map[int]int) map[int]int {
	ans := map[int]int{}
	for k, v := range m1 {
		ans[k] += v
	}
	for k, v := range m2 {
		ans[k] += v
	}
	return ans
}

func factor(num, pnum int, v map[int]int) bool {
	if pnum*pnum > num {
		if num != 1 {
			if v[num] > 0 {
				return false
			}
			v[num]++
		}
		return len(v) == 1
	}

	if num%pnum == 0 {
		num /= pnum
		if v[pnum] > 0 {
			return false
		}
		v[pnum]++
	} else {
		pnum++
	}
	return factor(num, pnum, v)
}

func main() {
	var X int
	fmt.Scan(&X)
	r := 0
	for i := X; r == 0; i++ {
		if factor(i, 2, map[int]int{}) {
			r = i
		}
	}
	fmt.Println(r)
}