あ、結城さんが完全数の話をさらに深めている。
問題
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までには見つけられませんでした。存在しないのかな。