Skip to content

Commit 736d371

Browse files
committed
Add style improvements for first soln of PE TheAlgorithms#3
1 parent b3c97d3 commit 736d371

File tree

1 file changed

+49
-23
lines changed

1 file changed

+49
-23
lines changed

project_euler/problem_03/sol1.py

Lines changed: 49 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,45 @@
55
66
e.g. for 10, largest prime factor = 5. For 17, largest prime factor = 17.
77
"""
8+
89
import math
910

1011

11-
def isprime(no):
12-
if no == 2:
12+
def isprime(num: int) -> bool:
13+
"""Returns boolean representing primality of given number num.
14+
>>> isprime(2)
15+
True
16+
>>> isprime(3)
17+
True
18+
>>> isprime(27)
19+
False
20+
>>> isprime(2999)
21+
True
22+
>>> isprime(0)
23+
Traceback (most recent call last):
24+
...
25+
ValueError: Parameter num must be greater or equal to two.
26+
>>> isprime(1)
27+
Traceback (most recent call last):
28+
...
29+
ValueError: Parameter num must be greater or equal to two.
30+
"""
31+
if num <= 1:
32+
raise ValueError("Parameter num must be greater or equal to two.")
33+
34+
if num == 2:
1335
return True
14-
elif no % 2 == 0:
36+
elif num % 2 == 0:
1537
return False
16-
sq = int(math.sqrt(no)) + 1
17-
for i in range(3, sq, 2):
18-
if no % i == 0:
38+
39+
for i in range(3, int(math.sqrt(num)) + 1, 2):
40+
if num % i == 0:
1941
return False
42+
2043
return True
2144

2245

23-
def solution(n):
46+
def solution(n: int = 600851475143) -> int:
2447
"""Returns the largest prime factor of a given number n.
2548
2649
>>> solution(13195)
@@ -54,24 +77,27 @@ def solution(n):
5477
raise TypeError("Parameter n must be int or passive of cast to int.")
5578
if n <= 0:
5679
raise ValueError("Parameter n must be greater or equal to one.")
57-
maxNumber = 0
80+
81+
max_number = 0
82+
83+
if isprime(n):
84+
return n
85+
86+
while n % 2 == 0:
87+
n //= 2
88+
5889
if isprime(n):
5990
return n
60-
else:
61-
while n % 2 == 0:
62-
n = n / 2
63-
if isprime(n):
64-
return int(n)
65-
else:
66-
n1 = int(math.sqrt(n)) + 1
67-
for i in range(3, n1, 2):
68-
if n % i == 0:
69-
if isprime(n / i):
70-
maxNumber = n / i
71-
break
72-
elif isprime(i):
73-
maxNumber = i
74-
return maxNumber
91+
92+
for i in range(3, int(math.sqrt(n)) + 1, 2):
93+
if n % i == 0:
94+
if isprime(n / i):
95+
max_number = n / i
96+
break
97+
elif isprime(i):
98+
max_number = i
99+
100+
return max_number
75101

76102

77103
if __name__ == "__main__":

0 commit comments

Comments
 (0)