Skip to content

Commit 0dd9d9b

Browse files
Refactor prime number functions and add type hints
1 parent fef9291 commit 0dd9d9b

File tree

1 file changed

+62
-16
lines changed

1 file changed

+62
-16
lines changed

maths/next_prime_number.py

Lines changed: 62 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,80 @@
11
"""
2+
Next Prime Number -- https://en.wikipedia.org/wiki/Prime_number
3+
24
In the ancient city of Numeria,
35
legends speak of an oracle whose whispers
46
could bend the very fabric of mathematics.
5-
Travelers from distant lands would bring
6-
her a number, and in return, she would reveal
7-
its future: the very next prime number.
7+
Travelers from distant lands would bring her a number,
8+
and in return, she would reveal its future:
9+
the very next prime number.
810
Your task is to embody the oracle's wisdom.
911
You will be given a number.
1012
You must find the smallest prime number
1113
that is strictly greater than it.
1214
"""
1315

1416

15-
def check_prime(n):
16-
if n <= 1:
17+
def is_prime(number: int) -> bool:
18+
"""
19+
Check if a number is prime.
20+
21+
>>> is_prime(2)
22+
True
23+
>>> is_prime(15)
24+
False
25+
>>> is_prime(19)
26+
True
27+
>>> is_prime(1)
28+
False
29+
>>> is_prime(-7)
30+
False
31+
"""
32+
if number <= 1:
1733
return False
18-
if n <= 3:
34+
if number <= 3:
1935
return True
20-
if n % 2 == 0 or n % 3 == 0:
36+
if number % 2 == 0 or number % 3 == 0:
2137
return False
22-
temp = 5
23-
while temp * temp <= n:
24-
if n % temp == 0 or n % (temp + 2) == 0:
38+
39+
factor = 5
40+
while factor * factor <= number:
41+
if number % factor == 0 or number % (factor + 2) == 0:
2542
return False
26-
temp += 6
43+
factor += 6
2744
return True
2845

2946

30-
n = int(input())
31-
next_prime = n + 1
32-
while not check_prime(next_prime):
33-
next_prime += 1
34-
print(next_prime)
47+
def next_prime(number: int) -> int:
48+
"""
49+
Find the smallest prime number strictly greater than the given number.
50+
51+
>>> next_prime(2)
52+
3
53+
>>> next_prime(7)
54+
11
55+
>>> next_prime(14)
56+
17
57+
>>> next_prime(0)
58+
2
59+
>>> next_prime(-10)
60+
2
61+
"""
62+
if not isinstance(number, int):
63+
raise ValueError("next_prime() only accepts integral values")
64+
65+
candidate = number + 1
66+
while not is_prime(candidate):
67+
candidate += 1
68+
return candidate
69+
70+
71+
if __name__ == "__main__":
72+
import doctest
73+
74+
doctest.testmod()
75+
76+
try:
77+
n = int(input("Enter an integer: ").strip() or 0)
78+
print(f"The next prime number after {n} is {next_prime(n)}")
79+
except ValueError:
80+
print("Please enter a valid integer.")

0 commit comments

Comments
 (0)