Rebased projecteuler folder, now includes all contest programming stuff
This commit is contained in:
60
projecteuler/023/main.py
Normal file
60
projecteuler/023/main.py
Normal file
@@ -0,0 +1,60 @@
|
||||
import os
|
||||
import math
|
||||
import numpy as np
|
||||
|
||||
# Find the sum of all positive integers which cannot be written as the sum
|
||||
# of two abundant numbers.
|
||||
|
||||
# A number is abundant if its properdivisors sum to
|
||||
# more than the original number, e.g. 12 is abundant, since 12 can be divided
|
||||
# by 1, 2, 3, 4, 6 = 16
|
||||
|
||||
# It can be proven that all numbers above 28123 can be written as the sum
|
||||
# of 2 abundant numbers
|
||||
|
||||
def getDivisors(n):
|
||||
divs = [True] * math.ceil(n/2)
|
||||
|
||||
for x in range(1, len(divs)):
|
||||
if divs[x] and n % (x + 1) != 0:
|
||||
y = x
|
||||
while y < len(divs):
|
||||
divs[y] = False
|
||||
y = y + x + 1
|
||||
|
||||
res = []
|
||||
for x in range(len(divs)):
|
||||
if divs[x]:
|
||||
res.append(x + 1)
|
||||
return res
|
||||
|
||||
def isAbundant(n):
|
||||
return sum(getDivisors(n)) > n
|
||||
|
||||
|
||||
def main():
|
||||
print("Hello, this is Patrick")
|
||||
|
||||
m = 28123
|
||||
|
||||
a = list(filter(isAbundant, range(1, m+1)))
|
||||
|
||||
# We are assuming that the abundants are sorted
|
||||
sums = set([])
|
||||
for i in range(len(a)):
|
||||
for j in range(i, len(a)):
|
||||
s = a[i] + a[j]
|
||||
if s > m:
|
||||
break
|
||||
else:
|
||||
#print(s)
|
||||
sums.add(s)
|
||||
|
||||
nonsums = set(range(1, m+1))
|
||||
nonsums.difference_update(sums)
|
||||
# print(nonsums)
|
||||
print(sum(nonsums))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user