euler/e021.py
Correl Roush dfa586dc1f Problem 021
git-svn-id: file:///srv/svn/euler@48 e5f4c3ec-3c0c-11df-b522-21efaa4426b5
2010-04-14 20:58:26 +00:00

28 lines
No EOL
700 B
Python

from e007 import is_prime
from e012 import factor
MIN = 2
MAX = 10000
def proper_divisors(n):
"""Returns the proper divisors of n
Proper divisors are defined as numbers less than n which divide evenly into n
"""
divisors = factor(n)
# Knock off the last factor, since it is equal to n
return divisors[:-1]
sums = {}
amicable = []
i = MIN
while i < MAX:
if not is_prime(i):
s = sum(proper_divisors(i))
sums[i] = s
if s in sums and i == sums[s] and i != s:
print i, s, sums[s]
amicable.append(i)
amicable.append(s)
i = i + 1
print 'Sum of amicable numbers less than {0}: {1}'.format(MAX, sum(amicable))