完全数の話を少し深めよう

あ、結城さんが完全数の話をさらに深めている。

結城浩の日記 : 長男と完全数談義

問題

nを正の整数とし、s(n)を「nのすべての約数の和」とする。このとき、s(n)=n+1になるnのことを何と呼ぶか?

答えは素数となる訳だ。綺麗な形繋がりでs(n) = 2n – 1になる数とはどういうものかを考えてみる。とりあえず10000までで調べてみることにする。

—–



前回作った完全数を探すプログラムを少し改造したperfectnumber2.pyを作成する。

perfectnumber2.py

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

実行結果。

>>> getperfectnum(10000)
[2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192]

うーん、美しいですね。ちなみにs(n) = 2n + 1となる数は10000までには見つけられませんでした。存在しないのかな。