牌語備忘録 -pygo

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

牌語備忘録 -pygo

友愛数をPythonでやってみた

今更乍ら映画『博士の愛した数式』がなかなか良かったので、友愛数Pythonでやってみた

友愛数とは、異なる2つの自然数の自分自身を除いた約数の和が、互いに他方と等しくなるような数をいう。親和数とも呼ばれる。

一番小さな友愛数の組は(220, 284)である。

  • 220の自分自身を除いた約数は、1,2,4,5,10,11,20,22,44,55,110で、和は284となる。一方、284の自分自身を除いた約数は、1,2,4,71,142で、和は220である。
友愛数 - Wikipedia
Python
#amicable numbers
def divisor_sum(p):
    return sum([n for n in range(1,p) if p % n == 0])

def amicable_num_list(min, max):
    result_li = []
    for n in range(min, max + 1):
        div = divisor_sum(n)
        if n == divisor_sum(div) and n != div:
            m = sorted([n,div])
            if not result_li.count(m):
                result_li.append(m)
    return result_li

print amicable_num_list(200, 10000)
結果

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

[[220, 284], [1184, 1210], [2620, 2924], [5020, 5564], [6232, 6368]]

いきなり処理遅いが...(||゚Д゚)