Skip to content

Commit 241f9c8

Browse files
committed
Fix docstring and align prime check behavior with tests
1 parent 647b899 commit 241f9c8

File tree

1 file changed

+20
-37
lines changed

1 file changed

+20
-37
lines changed

maths/prime_check.py

Lines changed: 20 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -7,47 +7,30 @@
77

88

99
def is_prime(number: int) -> bool:
10-
"""
10+
"""
1111
Check whether a given integer is a prime number.
1212
13-
:param n: integer to check
14-
:return: True if n is prime, False otherwise
15-
:raises ValueError: if n is less than 2
16-
"""
17-
if n < 2:
18-
raise ValueError("n must be an integer greater than or equal to 2")
19-
"""Checks to see if a number is a prime in O(sqrt(n)).
20-
21-
A number is prime if it has exactly two factors: 1 and itself.
22-
23-
>>> is_prime(0)
24-
False
25-
>>> is_prime(1)
26-
False
27-
>>> is_prime(2)
28-
True
29-
>>> is_prime(3)
30-
True
31-
>>> is_prime(27)
32-
False
33-
>>> is_prime(87)
34-
False
35-
>>> is_prime(563)
36-
True
37-
>>> is_prime(2999)
38-
True
39-
>>> is_prime(67483)
40-
False
41-
>>> is_prime(16.1)
42-
Traceback (most recent call last):
43-
...
44-
ValueError: is_prime() only accepts positive integers
45-
>>> is_prime(-4)
46-
Traceback (most recent call last):
47-
...
48-
ValueError: is_prime() only accepts positive integers
13+
A prime number has exactly two distinct positive divisors: 1 and itself.
14+
15+
:param number: integer to check
16+
:return: True if number is prime, False otherwise
17+
:raises ValueError: if input is not a positive integer
4918
"""
5019

20+
# precondition
21+
if not isinstance(number, int) or number < 0:
22+
raise ValueError("is_prime() only accepts positive integers")
23+
24+
if 1 < number < 4:
25+
return True
26+
if number < 2 or number % 2 == 0 or number % 3 == 0:
27+
return False
28+
29+
for i in range(5, int(math.sqrt(number)) + 1, 6):
30+
if number % i == 0 or number % (i + 2) == 0:
31+
return False
32+
return True
33+
5134
# precondition
5235
if not isinstance(number, int) or not number >= 0:
5336
raise ValueError("is_prime() only accepts positive integers")

0 commit comments

Comments
 (0)