File tree 1 file changed +49
-23
lines changed 1 file changed +49
-23
lines changed Original file line number Diff line number Diff line change 5
5
6
6
e.g. for 10, largest prime factor = 5. For 17, largest prime factor = 17.
7
7
"""
8
+
8
9
import math
9
10
10
11
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 :
13
35
return True
14
- elif no % 2 == 0 :
36
+ elif num % 2 == 0 :
15
37
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 :
19
41
return False
42
+
20
43
return True
21
44
22
45
23
- def solution (n ) :
46
+ def solution (n : int = 600851475143 ) -> int :
24
47
"""Returns the largest prime factor of a given number n.
25
48
26
49
>>> solution(13195)
@@ -54,24 +77,27 @@ def solution(n):
54
77
raise TypeError ("Parameter n must be int or passive of cast to int." )
55
78
if n <= 0 :
56
79
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
+
58
89
if isprime (n ):
59
90
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
75
101
76
102
77
103
if __name__ == "__main__" :
You can’t perform that action at this time.
0 commit comments