#21: Amicable numbers | Ben Cunningham

# #21: Amicable numbers

Problem by Project Euler · on July 5, 2002

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 \neq 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.

# Python

import functools
import operator

def l_factors(x):

[ll, lh] = [[], []]

for f in range(1, int(x ** (1/2.0)) + 1):
if x % f == 0:
ll.append(f)
fp = x / f
if fp != f:
lh.append(int(fp))

return ll + list(reversed(lh))

def is_prime(x):

if x < 4:
return True

if x % 2 == 0:
return False

for fac in range(3, int(x ** (1/2.0)) + 1, 2):
if x % fac == 0:
return False

return True

def v_sum(x):
if len(x) < 1:
return 0

## 31626