今更乍ら映画『博士の愛した数式』がなかなか良かったので、友愛数をPythonでやってみた
友愛数とは、異なる2つの自然数の自分自身を除いた約数の和が、互いに他方と等しくなるような数をいう。親和数とも呼ばれる。
一番小さな友愛数の組は(220, 284)である。
友愛数 - Wikipedia
- 220の自分自身を除いた約数は、1,2,4,5,10,11,20,22,44,55,110で、和は284となる。一方、284の自分自身を除いた約数は、1,2,4,71,142で、和は220である。
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]]
いきなり処理遅いが...(||゚Д゚)