完全数、友愛数、婚約数について調べました。
完全数
「自ら」=「自らを除いた約数の合計」となる整数。
「6」が完全数。
6の約数は1,2,3,6なので6を除いた1,2,3を合計すると6になる。
6=1+2+3
「28」も完全数。
28=1+2+4+7+14
その次の完全数は「496」である。
友愛数
互いに「相手」=「自らを除いた約数の合計」となる整数の組。
「220」と「284」が友愛数。
220の約数は1,2,4,5,10,11,20,22,44,55,110,220なので220を除いて合計すると284になる。
284の約数は1,2,4,71,142,284なので284を除いて合計すると220になる。
284=1+2+4+5+10+11+20+22+44+55+110
220=1+2+4+71+142
婚約数
互いに「相手」=「1と自らを除いた約数の合計」となる整数の組。
「48」と「75」が婚約数。
友愛数に似ているが1を除いて合計する点が違う。
75=2+3+4+6+8+12+16+24
48=3+5+15+25
完全数を求めるコード
def is_perfect(num):
# 完全数ならばTrueを返す関数
ns = divisors(num)
if num == sum(ns) - num: # 「自ら」=「自らを除いた約数の合計」
return True
else:
return False
def divisors(num):
# 約数を列挙する関数
ns = []
for n in range(1, num + 1):
if num % n == 0:
ns.append(n)
return ns
# 1から1000まで完全数ならば印字する
for num in range(1, 1001):
if is_perfect(num):
print(num)
# 完全数ならばTrueを返す関数
ns = divisors(num)
if num == sum(ns) - num: # 「自ら」=「自らを除いた約数の合計」
return True
else:
return False
def divisors(num):
# 約数を列挙する関数
ns = []
for n in range(1, num + 1):
if num % n == 0:
ns.append(n)
return ns
# 1から1000まで完全数ならば印字する
for num in range(1, 1001):
if is_perfect(num):
print(num)
コメント