牌語備忘録 -pygo

あくまでもメモです。なるべくオフィシャルの情報を参照してください。

牌語備忘録 -pygo

完全数もPythonでやってみた

博士の愛した数式』がなかなか良かったので友愛数に引き続き完全数Pythonでやってみた

完全数とは、その数自身を除く約数の和が、その数自身と等しい自然数のことである。例えば 6 (=1+2+3)、28 (=1+2+4+7+14) が完全数である。

完全数 - Wikipedia
Python
def divisor(p):
    return [n for n in range(1,p) if p % n == 0]

def p_num(min, max):
    return [n for n in range(min, max) if n == sum(divisor(n))]

def put_p_num(seq):
    for n in seq:
        print "%d (=%s)" % (n, "+".join(map(str,divisor(n))))

pn = p_num(1,10000)
put_p_num(pn)
結果

1から10000の間で調べてみた

6 (=1+2+3)
28 (=1+2+4+7+14)
496 (=1+2+4+8+16+31+62+124+248)
8128 (=1+2+4+8+16+32+64+127+254+508+1016+2032+4064)

また処理遅いが...(||゚Д゚)