Moved 20 to 26 to Python.

This commit is contained in:
2019-07-15 22:11:49 -04:00
parent 0ab214633e
commit f76b36c8d3
10 changed files with 194 additions and 174 deletions

View File

@@ -1,40 +1,28 @@
import math
def get_proper_divisors(n):
proper_divisors = set([1])
for i in range(2, int(math.sqrt(n)) + 1):
if n % i == 0:
proper_divisors.add(i)
proper_divisors.add(n / i)
return proper_divisors
from lib_misc import sum_proper_divisors
def is_abundant(n):
return sum(get_proper_divisors(n)) > n
return sum_proper_divisors(n) > n
def get_abundant_numbers_smaller(n):
ret = []
for i in range(1, n):
if is_abundant(i):
ret.append(i)
return ret
def is_sum_of_two_abundant(n, abundant_numbers):
abundant_numbers_set = set(abundant_numbers)
for a1 in abundant_numbers:
if a1 > n:
def is_sum_of_two_abundant(n, abundant_numbers, abundant_numbers_set):
for a in abundant_numbers:
if a > n:
return False
elif (n - a1) in abundant_numbers_set:
d = n - a
if d in abundant_numbers_set:
return True
return False
def euler_023():
abundant_numbers = [n for n in range(1, 28123 + 1) if is_abundant(n)]
abundant_numbers_set = set(abundant_numbers)
return sum([n for n in range(1, 28123 + 1)
if not is_sum_of_two_abundant(n, abundant_numbers,
abundant_numbers_set)])
if __name__ == "__main__":
abundant_numbers = get_abundant_numbers_smaller(30000)
cannot_be_written_as_sum_of_abundant = []
for i in range(28129):
if not is_sum_of_two_abundant(i, abundant_numbers):
cannot_be_written_as_sum_of_abundant.append(i)
print(sum(cannot_be_written_as_sum_of_abundant))
print("e023.py: {}".format(euler_023()))
assert(euler_023() == 4179871)