完全数を求めるプログラム

rubyco(るびこ)の日記 : 10000までの完全数を列挙せよ

エラトステネスの篩もよいけれど、別の問題もやろうよ。ということで「完全数」です。

Rubyは結構縦長なコードになる印象ですね。Pythonは横長になるなぁ。そんな訳で書いてみました。

—–



perfectnumber.py

def getdivisorsum(num):
list = range(1,int(num / 2) + 1);
return sum([x for x in list if num % x == 0])
def getperfectnum(limit):
return [x for x in range(2,limit + 1) if getdivisorsum(x) == x]

実行結果。

>>> getperfectnum(10000)
[6, 28, 496, 8128]

10秒程度の時間がかかってしまいました。100000まで求めようと思うとマシンが止まります。