diff --git a/Project Euler/Problem 21/sol1.py b/Project Euler/Problem 21/sol1.py new file mode 100644 index 000000000..6d137a7d4 --- /dev/null +++ b/Project Euler/Problem 21/sol1.py @@ -0,0 +1,42 @@ +#-.- coding: latin-1 -.- +from __future__ import print_function +from math import sqrt +''' +Amicable Numbers +Problem 21 + +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. +''' +try: + xrange #Python 2 +except NameError: + xrange = range #Python 3 + +def sum_of_divisors(n): + total = 0 + for i in xrange(1, int(sqrt(n)+1)): + if n%i == 0 and i != sqrt(n): + total += i + n//i + elif i == sqrt(n): + total += i + + return total-n + +sums = [] +total = 0 + +for i in xrange(1, 10000): + n = sum_of_divisors(i) + + if n < len(sums): + if sums[n-1] == i: + total += n + i + + sums.append(n) + +print(total) \ No newline at end of file diff --git a/Project Euler/Problem 76/sol1.py b/Project Euler/Problem 76/sol1.py new file mode 100644 index 000000000..2832f6d7a --- /dev/null +++ b/Project Euler/Problem 76/sol1.py @@ -0,0 +1,35 @@ +from __future__ import print_function +''' +Counting Summations +Problem 76 + +It is possible to write five as a sum in exactly six different ways: + +4 + 1 +3 + 2 +3 + 1 + 1 +2 + 2 + 1 +2 + 1 + 1 + 1 +1 + 1 + 1 + 1 + 1 + +How many different ways can one hundred be written as a sum of at least two positive integers? +''' +try: + xrange #Python 2 +except NameError: + xrange = range #Python 3 + +def partition(m): + memo = [[0 for _ in xrange(m)] for _ in xrange(m+1)] + for i in xrange(m+1): + memo[i][0] = 1 + + for n in xrange(m+1): + for k in xrange(1, m): + memo[n][k] += memo[n][k-1] + if n > k: + memo[n][k] += memo[n-k-1][k] + + return (memo[m][m-1] - 1) + +print(partition(100)) \ No newline at end of file