The problem:
Let d(n) be defined as the sum of proper divisors of n (numbers less than n which divide evenly into n).
If d(a) = b and d(b) = a, where a
b, then a and b are an amicable pair and each of a and b are called amicable numbers.
For example, the proper divisors of 220 are 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 and 110; therefore d(220) = 284. The proper divisors of 284 are 1, 2, 4, 71 and 142; so d(284) = 220.
Evaluate the sum of all the amicable numbers under 10000.
The solution:
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 | def properDivisor(n): listProperDivisor = [] for i in range(1, (int(n/2)+1)): if n%i == 0: listProperDivisor.append(i) return listProperDivisor def sumList(aList): total = 0 for number in aList: total = total + number return total def checkAmicablePair (n,m): if (sumList(properDivisor(n)) == m) and (sumList(properDivisor(m)) == n) and (n <> m): return 1 listAmicablePairs = [] counterAmicablePairs = 0 sumAmicablePairs = 0 for x in range (1,10001): tempList = properDivisor(x) tempVar = sumList(tempList) if checkAmicablePair(x, tempVar) == 1: listAmicablePairs.append([x, tempVar]) counterAmicablePairs = counterAmicablePairs + 1 sumAmicablePairs = sumAmicablePairs + x + tempVar print "TOTAL AMICABLE PAIRS ", counterAmicablePairs print listAmicablePairs print print "Evaluation of exclusive sum = ", sumAmicablePairs / 2 |