Skip to content

Commit 1fbf132

Browse files
committed
1 parent b3d9281 commit 1fbf132

File tree

12 files changed

+394
-130
lines changed

12 files changed

+394
-130
lines changed

Diff for: project_euler/problem_003/sol1.py

+22-13
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,11 @@
1313
import math
1414

1515

16-
def is_prime(num: int) -> bool:
17-
"""
18-
Returns boolean representing primality of given number num.
16+
def is_prime(number: int) -> bool:
17+
"""Checks to see if a number is a prime in O(sqrt(n)).
18+
A number is prime if it has exactly two factors: 1 and itself.
19+
Returns boolean representing primality of given number num (i.e., if the
20+
result is true, then the number is indeed prime else it is not).
1921
2022
>>> is_prime(2)
2123
True
@@ -26,23 +28,30 @@ def is_prime(num: int) -> bool:
2628
>>> is_prime(2999)
2729
True
2830
>>> is_prime(0)
29-
Traceback (most recent call last):
30-
...
31-
ValueError: Parameter num must be greater than or equal to two.
31+
False
3232
>>> is_prime(1)
33+
False
34+
>>> is_prime(3.14)
3335
Traceback (most recent call last):
3436
...
35-
ValueError: Parameter num must be greater than or equal to two.
37+
AssertionError: 'number' must been an int and positive
3638
"""
3739

38-
if num <= 1:
39-
raise ValueError("Parameter num must be greater than or equal to two.")
40-
if num == 2:
40+
# precondition
41+
assert isinstance(number, int) and (
42+
number >= 0
43+
), "'number' must been an int and positive"
44+
45+
if 1 < number < 4:
46+
# 2 and 3 are primes
4147
return True
42-
elif num % 2 == 0:
48+
elif number < 2 or number % 2 == 0 or number % 3 == 0:
49+
# Negatives, 0, 1, all even numbers, all multiples of 3 are not primes
4350
return False
44-
for i in range(3, int(math.sqrt(num)) + 1, 2):
45-
if num % i == 0:
51+
52+
# All primes number are in format of 6k +/- 1
53+
for i in range(5, int(math.sqrt(number) + 1), 6):
54+
if number % i == 0 or number % (i + 2) == 0:
4655
return False
4756
return True
4857

Diff for: project_euler/problem_007/sol1.py

+29-12
Original file line numberDiff line numberDiff line change
@@ -15,29 +15,46 @@
1515
from math import sqrt
1616

1717

18-
def is_prime(num: int) -> bool:
19-
"""
20-
Determines whether the given number is prime or not
18+
def is_prime(number: int) -> bool:
19+
"""Checks to see if a number is a prime in O(sqrt(n)).
20+
A number is prime if it has exactly two factors: 1 and itself.
21+
Returns boolean representing primality of given number num (i.e., if the
22+
result is true, then the number is indeed prime else it is not).
2123
2224
>>> is_prime(2)
2325
True
24-
>>> is_prime(15)
26+
>>> is_prime(3)
27+
True
28+
>>> is_prime(27)
2529
False
26-
>>> is_prime(29)
30+
>>> is_prime(2999)
2731
True
2832
>>> is_prime(0)
2933
False
34+
>>> is_prime(1)
35+
False
36+
>>> is_prime(3.14)
37+
Traceback (most recent call last):
38+
...
39+
AssertionError: 'number' must been an int and positive
3040
"""
3141

32-
if num == 2:
42+
# precondition
43+
assert isinstance(number, int) and (
44+
number >= 0
45+
), "'number' must been an int and positive"
46+
47+
if 1 < number < 4:
48+
# 2 and 3 are primes
3349
return True
34-
elif num % 2 == 0:
50+
elif number < 2 or number % 2 == 0 or number % 3 == 0:
51+
# Negatives, 0, 1, all even numbers, all multiples of 3 are not primes
3552
return False
36-
else:
37-
sq = int(sqrt(num)) + 1
38-
for i in range(3, sq, 2):
39-
if num % i == 0:
40-
return False
53+
54+
# All primes number are in format of 6k +/- 1
55+
for i in range(5, int(sqrt(number) + 1), 6):
56+
if number % i == 0 or number % (i + 2) == 0:
57+
return False
4158
return True
4259

4360

Diff for: project_euler/problem_007/sol2.py

+32-6
Original file line numberDiff line numberDiff line change
@@ -11,22 +11,48 @@
1111
References:
1212
- https://en.wikipedia.org/wiki/Prime_number
1313
"""
14+
import math
1415

1516

1617
def is_prime(number: int) -> bool:
17-
"""
18-
Determines whether the given number is prime or not
18+
"""Checks to see if a number is a prime in O(sqrt(n)).
19+
A number is prime if it has exactly two factors: 1 and itself.
20+
Returns boolean representing primality of given number num (i.e., if the
21+
result is true, then the number is indeed prime else it is not).
1922
2023
>>> is_prime(2)
2124
True
22-
>>> is_prime(15)
25+
>>> is_prime(3)
26+
True
27+
>>> is_prime(27)
2328
False
24-
>>> is_prime(29)
29+
>>> is_prime(2999)
2530
True
31+
>>> is_prime(0)
32+
False
33+
>>> is_prime(1)
34+
False
35+
>>> is_prime(3.14)
36+
Traceback (most recent call last):
37+
...
38+
AssertionError: 'number' must been an int and positive
2639
"""
2740

28-
for i in range(2, int(number**0.5) + 1):
29-
if number % i == 0:
41+
# precondition
42+
assert isinstance(number, int) and (
43+
number >= 0
44+
), "'number' must been an int and positive"
45+
46+
if 1 < number < 4:
47+
# 2 and 3 are primes
48+
return True
49+
elif number < 2 or number % 2 == 0 or number % 3 == 0:
50+
# Negatives, 0, 1, all even numbers, all multiples of 3 are not primes
51+
return False
52+
53+
# All primes number are in format of 6k +/- 1
54+
for i in range(5, int(math.sqrt(number) + 1), 6):
55+
if number % i == 0 or number % (i + 2) == 0:
3056
return False
3157
return True
3258

Diff for: project_euler/problem_007/sol3.py

+32-6
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,46 @@
1616

1717

1818
def is_prime(number: int) -> bool:
19-
"""
20-
Determines whether a given number is prime or not
19+
"""Checks to see if a number is a prime in O(sqrt(n)).
20+
A number is prime if it has exactly two factors: 1 and itself.
21+
Returns boolean representing primality of given number num (i.e., if the
22+
result is true, then the number is indeed prime else it is not).
2123
2224
>>> is_prime(2)
2325
True
24-
>>> is_prime(15)
26+
>>> is_prime(3)
27+
True
28+
>>> is_prime(27)
2529
False
26-
>>> is_prime(29)
30+
>>> is_prime(2999)
2731
True
32+
>>> is_prime(0)
33+
False
34+
>>> is_prime(1)
35+
False
36+
>>> is_prime(3.14)
37+
Traceback (most recent call last):
38+
...
39+
AssertionError: 'number' must been an int and positive
2840
"""
2941

30-
if number % 2 == 0 and number > 2:
42+
# precondition
43+
assert isinstance(number, int) and (
44+
number >= 0
45+
), "'number' must been an int and positive"
46+
47+
if 1 < number < 4:
48+
# 2 and 3 are primes
49+
return True
50+
elif number < 2 or number % 2 == 0 or number % 3 == 0:
51+
# Negatives, 0, 1, all even numbers, all multiples of 3 are not primes
3152
return False
32-
return all(number % i for i in range(3, int(math.sqrt(number)) + 1, 2))
53+
54+
# All primes number are in format of 6k +/- 1
55+
for i in range(5, int(math.sqrt(number) + 1), 6):
56+
if number % i == 0 or number % (i + 2) == 0:
57+
return False
58+
return True
3359

3460

3561
def prime_generator():

Diff for: project_euler/problem_010/sol1.py

+29-7
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,14 @@
1111
- https://en.wikipedia.org/wiki/Prime_number
1212
"""
1313

14-
from math import sqrt
14+
import math
1515

1616

17-
def is_prime(n: int) -> bool:
18-
"""
19-
Returns boolean representing primality of given number num.
17+
def is_prime(number: int) -> bool:
18+
"""Checks to see if a number is a prime in O(sqrt(n)).
19+
A number is prime if it has exactly two factors: 1 and itself.
20+
Returns boolean representing primality of given number num (i.e., if the
21+
result is true, then the number is indeed prime else it is not).
2022
2123
>>> is_prime(2)
2224
True
@@ -26,13 +28,33 @@ def is_prime(n: int) -> bool:
2628
False
2729
>>> is_prime(2999)
2830
True
31+
>>> is_prime(0)
32+
False
33+
>>> is_prime(1)
34+
False
35+
>>> is_prime(3.14)
36+
Traceback (most recent call last):
37+
...
38+
AssertionError: 'number' must been an int and positive
2939
"""
3040

31-
if 1 < n < 4:
41+
# precondition
42+
assert isinstance(number, int) and (
43+
number >= 0
44+
), "'number' must been an int and positive"
45+
46+
if 1 < number < 4:
47+
# 2 and 3 are primes
3248
return True
33-
elif n < 2 or not n % 2:
49+
elif number < 2 or number % 2 == 0 or number % 3 == 0:
50+
# Negatives, 0, 1, all even numbers, all multiples of 3 are not primes
3451
return False
35-
return not any(not n % i for i in range(3, int(sqrt(n) + 1), 2))
52+
53+
# All primes number are in format of 6k +/- 1
54+
for i in range(5, int(math.sqrt(number) + 1), 6):
55+
if number % i == 0 or number % (i + 2) == 0:
56+
return False
57+
return True
3658

3759

3860
def solution(n: int = 2000000) -> int:

Diff for: project_euler/problem_010/sol2.py

+28-4
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,10 @@
1616

1717

1818
def is_prime(number: int) -> bool:
19-
"""
20-
Returns boolean representing primality of given number num.
19+
"""Checks to see if a number is a prime in O(sqrt(n)).
20+
A number is prime if it has exactly two factors: 1 and itself.
21+
Returns boolean representing primality of given number num (i.e., if the
22+
result is true, then the number is indeed prime else it is not).
2123
2224
>>> is_prime(2)
2325
True
@@ -27,11 +29,33 @@ def is_prime(number: int) -> bool:
2729
False
2830
>>> is_prime(2999)
2931
True
32+
>>> is_prime(0)
33+
False
34+
>>> is_prime(1)
35+
False
36+
>>> is_prime(3.14)
37+
Traceback (most recent call last):
38+
...
39+
AssertionError: 'number' must been an int and positive
3040
"""
3141

32-
if number % 2 == 0 and number > 2:
42+
# precondition
43+
assert isinstance(number, int) and (
44+
number >= 0
45+
), "'number' must been an int and positive"
46+
47+
if 1 < number < 4:
48+
# 2 and 3 are primes
49+
return True
50+
elif number < 2 or number % 2 == 0 or number % 3 == 0:
51+
# Negatives, 0, 1, all even numbers, all multiples of 3 are not primes
3352
return False
34-
return all(number % i for i in range(3, int(math.sqrt(number)) + 1, 2))
53+
54+
# All primes number are in format of 6k +/- 1
55+
for i in range(5, int(math.sqrt(number) + 1), 6):
56+
if number % i == 0 or number % (i + 2) == 0:
57+
return False
58+
return True
3559

3660

3761
def prime_generator() -> Iterator[int]:

Diff for: project_euler/problem_027/sol1.py

+36-12
Original file line numberDiff line numberDiff line change
@@ -23,22 +23,46 @@
2323
import math
2424

2525

26-
def is_prime(k: int) -> bool:
27-
"""
28-
Determine if a number is prime
29-
>>> is_prime(10)
26+
def is_prime(number: int) -> bool:
27+
"""Checks to see if a number is a prime in O(sqrt(n)).
28+
A number is prime if it has exactly two factors: 1 and itself.
29+
Returns boolean representing primality of given number num (i.e., if the
30+
result is true, then the number is indeed prime else it is not).
31+
32+
>>> is_prime(2)
33+
True
34+
>>> is_prime(3)
35+
True
36+
>>> is_prime(27)
3037
False
31-
>>> is_prime(11)
38+
>>> is_prime(2999)
3239
True
40+
>>> is_prime(0)
41+
False
42+
>>> is_prime(1)
43+
False
44+
>>> is_prime(3.14)
45+
Traceback (most recent call last):
46+
...
47+
AssertionError: 'number' must been an int and positive
3348
"""
34-
if k < 2 or k % 2 == 0:
35-
return False
36-
elif k == 2:
49+
50+
# precondition
51+
assert isinstance(number, int) and (
52+
number >= 0
53+
), "'number' must been an int and positive"
54+
55+
if 1 < number < 4:
56+
# 2 and 3 are primes
3757
return True
38-
else:
39-
for x in range(3, int(math.sqrt(k) + 1), 2):
40-
if k % x == 0:
41-
return False
58+
elif number < 2 or number % 2 == 0 or number % 3 == 0:
59+
# Negatives, 0, 1, all even numbers, all multiples of 3 are not primes
60+
return False
61+
62+
# All primes number are in format of 6k +/- 1
63+
for i in range(5, int(math.sqrt(number) + 1), 6):
64+
if number % i == 0 or number % (i + 2) == 0:
65+
return False
4266
return True
4367

4468

0 commit comments

Comments
 (0)