首页 > 代码库 > 欧拉计划(python) problem 21

欧拉计划(python) problem 21

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.


Answer:
31626
Completed on Sat, 31 Jan 2015, 03:45

python code:

import math
sqrt=math.sqrt


def func(x):
    result=1
    k=int(sqrt(x))+1
    for i in range(2,k):
        if x%i==0 and i!=sqrt(x):
            result+=i+x/i
        else:
            if (x%i==0 and i==sqrt(x)):
                result+=i
    return result
result=0
for i in range(4,10001):
    k=func(i)
    if k!=i and func(k)==i:
        result+=i
print(result)

time : <1s

欧拉计划(python) problem 21