Skip to content

Commit cc2524b

Browse files
authored
Add palindromic_prime_check.py
Add palprime (palindromic prime) number detection Algorithm
1 parent 14ca726 commit cc2524b

File tree

1 file changed

+119
-0
lines changed

1 file changed

+119
-0
lines changed

maths/palindromic_prime_check.py

+119
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
"""
2+
A palindromic prime is a prime number that is also palindromic, meaning it remains
3+
the same when its digits are reversed.
4+
5+
For more information about palindromic primes, refer to:
6+
https://en.wikipedia.org/wiki/Palindromic_prime
7+
"""
8+
9+
10+
def is_prime(number: int) -> bool:
11+
"""
12+
Check if a number is prime.
13+
14+
Args:
15+
number: A positive integer.
16+
17+
Returns:
18+
True if the number is prime, False otherwise.
19+
20+
Raises:
21+
ValueError: If number is not a positive integer.
22+
23+
Examples:
24+
>>> is_prime(2)
25+
True
26+
>>> is_prime(3)
27+
True
28+
>>> is_prime(88)
29+
False
30+
>>> is_prime(1)
31+
False
32+
>>> is_prime(9679)
33+
True
34+
>>> is_prime(0)
35+
Traceback (most recent call last):
36+
...
37+
ValueError: Input must be a positive integer.
38+
>>> is_prime(-17)
39+
Traceback (most recent call last):
40+
...
41+
ValueError: Input must be a positive integer.
42+
>>> is_prime(9.51)
43+
Traceback (most recent call last):
44+
...
45+
ValueError: Input must be a positive integer.
46+
>>> is_prime("261")
47+
Traceback (most recent call last):
48+
...
49+
ValueError: Input must be a positive integer.
50+
"""
51+
if not isinstance(number, int) or number <= 0:
52+
raise ValueError("Input must be a positive integer.")
53+
54+
if 1 < number < 4:
55+
return True
56+
elif number < 2 or (number % 2 == 0):
57+
return False
58+
59+
# Return True if number is not divisible by any odd number up to its square root
60+
return all(number % i != 0 for i in range(3, int(number**0.5) + 1, 2))
61+
62+
63+
def palindromic_prime_check(number: int) -> bool:
64+
"""
65+
Check if a number is a palindromic prime number.
66+
67+
Args:
68+
number: A positive integer.
69+
70+
Returns:
71+
True if the number is a palindromic prime number, False otherwise.
72+
73+
Raises:
74+
ValueError: If number is not a positive integer.
75+
76+
Examples:
77+
>>> palindromic_prime_check(13)
78+
False
79+
>>> palindromic_prime_check(131)
80+
True
81+
>>> palindromic_prime_check(121)
82+
False
83+
>>> palindromic_prime_check(929)
84+
True
85+
>>> palindromic_prime_check(2)
86+
True
87+
>>> palindromic_prime_check(7)
88+
True
89+
>>> palindromic_prime_check(0)
90+
Traceback (most recent call last):
91+
...
92+
ValueError: Input must be a positive integer.
93+
>>> palindromic_prime_check(-131)
94+
Traceback (most recent call last):
95+
...
96+
ValueError: Input must be a positive integer.
97+
>>> palindromic_prime_check(1.9)
98+
Traceback (most recent call last):
99+
...
100+
ValueError: Input must be a positive integer.
101+
>>> palindromic_prime_check("hello")
102+
Traceback (most recent call last):
103+
...
104+
ValueError: Input must be a positive integer.
105+
"""
106+
if not isinstance(number, int) or number <= 0:
107+
raise ValueError("Input must be a positive integer.")
108+
109+
if is_prime(number):
110+
number_str = str(number)
111+
if number_str == number_str[::-1]:
112+
return True
113+
return False
114+
115+
116+
if __name__ == "__main__":
117+
import doctest
118+
119+
doctest.testmod()

0 commit comments

Comments
 (0)