見出し画像

Pythonで完全数、友愛数、婚約数を計算

整数には完全数だけでなく、友愛数、婚約数というものがあります。これらの組合せを求めるプログラムを作ってみました。

Pythonで完全数、友愛数、婚約数を計算する

友愛数を求めるプログラム

異なる2つの正の整数の組で、自身を除いた約数の和が、互いに他方と等しくなるような数を友愛数(amicable numbers)といいます。

例えば220の自身を除いた約数は、1,2,4,5,10,11,20,22,44,55,110で、これらの和は 284とりなります。この284の自身を除いた約数は、1, 2, 4, 71, 142 で、その合計は220と元の整数に戻ります。さっそく、友愛数を計算します。

amical_l = []
for i in range(1, 100000 + 1):
   amical = divisor_perfect(i)
   if amical <= i:
       continue
   if divisor_perfect(amical) == i:
       amical_l.append([i,amical])

amical_l

[[220, 284],
[1184, 1210],
[2620, 2924],
[5020, 5564],
[6232, 6368],
[10744, 10856],
[12285, 14595],
[17296, 18416],
[63020, 76084],
[66928, 66992],
[67095, 71145],
[69615, 87633],
[79750, 88730]]

10万までの間に13組見つかりました。

婚約数の計算

婚約数は異なる2つの正の整数の組で、1と自分自身を除いた約数の和が、互いに他方と等しくなるような整数を婚約数(betrothed numbers)といいます。

betrothed_l = []
for i in range(1, 100000 + 1):
   betrothed = divisor_perfect(i)-1
   if betrothed <= i:
       continue
   if divisor_perfect(betrothed)-1 == i:
       betrothed_l.append([i,betrothed])

betrothed_l

[[48, 75],
[140, 195],
[1050, 1925],
[1575, 1648],
[2024, 2295],
[5775, 6128],
[8892, 16587],
[9504, 20735],
[62744, 75495]]

10万までの間に13組見つかりました。1を入れるか入れないかで随分結果が違ってきます。ちなみに友愛数は、偶数、奇数の視点で見ると、ペアの中では偶数同士か奇数同士になりますが、婚約数は偶数と奇数の組合せになっています。これは偶然なのか意味があるのか、興味深いところです。







この記事が気に入ったらサポートをしてみませんか?