読者です 読者をやめる 読者になる 読者になる

何かを書き留める何か

数学や読んだ本について書く何かです。最近は社会人として生き残りの術を学ぶ日々です。

Project Euler Problem 21

Project Euler

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 \not= 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.
http://projecteuler.net/problem=21

10000以下の友愛数の総和を求める問題。
友愛数の定義に従えばよいが、約数を求めるのが大変かもしれない。
ここは都合よくSage の函数が用意されているのでありがたく使わせてもらう。

ans = 0
for a in xrange(2,10000):
    b = sum([x for x in divisors(a) if x != a])
    if b > a:
        if sum([x for x in divisors(b) if x != b]) == a:
            ans = ans + a + b
print ans

少しずつ更新していくようにしたい。