-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path3.py
41 lines (32 loc) · 1.01 KB
/
3.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import numpy as np
def sieve(num : int) -> int:
"""Return largest prime divisor of num via Sieve of Eratosthenes"""
upper_bound = round(np.sqrt(num + 1))
divisors = [1] * upper_bound # 0 = not a prime divisor, 1 = prime divisor
for divisor in range(2,upper_bound):
if divisors[divisor] == 0:
continue
if num % divisor != 0:
divisors[divisor] = 0
continue
if num % divisor == 0:
divisors[divisor] = 1
cur = 2 * divisor
while(cur < upper_bound):
divisors[cur] = 0
cur += divisor
continue
max_prime_divisor = max(max(np.where(divisors)))
return max_prime_divisor
if __name__ == "__main__":
result = sieve(600851475143)
print(result)
def test_basic():
result = sieve(50)
assert(result == 5)
def test_larger():
result = sieve(1000)
assert(result == 5)
def test_solution():
result = sieve(600851475143)
assert(result == 6857)