今回は小説「博士の愛した数式」
に登場する数
完全数・友愛数・結婚数についてです。
解説動画はこちら
さて完全数・友愛数・結婚数とは何でしょうか?
それぞれ見ていきましょう。
その数自身を除く約数の和が
その数自身と等しい自然数のこと
例:
これをプログラムで求めてみましょう。
約数を求める部分は
字直に書いても良いのですが
sympyを使うと計算が早く済みます。
sympy.divisors(数値)
でその数までの約数をリスト化できます。
これを使っていきましょう。
28
496
8128
こんな感じで出ました。
意外と少ないですね。
元の数と一致すれば友愛数になります。
求めるコードは・・・
先ほどの完全数と違って
多く見つかりますね。
元の数と一致すれば結婚数になります。
求めるコードはこんな感じです。
完全数よりは多そうですが
友愛すうよりは少ないですね。
こんな感じで見つかります。
これが求められたからといって
何か凄いことがある訳でも無いんですが
なかなか面白い数であるかなーとは
思いますので、暇な時にでも
思い出してみてください。
クイズとか使えるかもしれないですね。
それでは。
に登場する数
完全数・友愛数・結婚数についてです。
解説動画はこちら
さて完全数・友愛数・結婚数とは何でしょうか?
それぞれ見ていきましょう。
完全数
その数自身を除く約数の和が
その数自身と等しい自然数のこと
例:
6の(自分自身以外の)約数 : 1, 2, 3 その和は6
これをプログラムで求めてみましょう。
約数を求める部分は
字直に書いても良いのですが
sympyを使うと計算が早く済みます。
sympy.divisors(数値)
でその数までの約数をリスト化できます。
これを使っていきましょう。
# 完全数を求める
import sympy
# 約数の合計を算出する
def total_divisors(num):
return sum(sympy.divisors(num)[:-1])
for i in range(1,10000):
if i==total_divisors(i):
print(i)
628
496
8128
こんな感じで出ました。
意外と少ないですね。
友愛数
異なる2つの自然数の組で
自分自身を除いた約数の和が
互いに他方と等しくなるような数
自分自身を除いた約数の和が
互いに他方と等しくなるような数
親和数 とも呼ばれる
例:
220の(自分自身以外の)約数
1, 2, 4, 5, 10, 11, 20, 22, 44, 55, 110
その和は284
1, 2, 4, 5, 10, 11, 20, 22, 44, 55, 110
その和は284
284の(自分自身以外の)約数
1, 2, 4, 71, 142
その和は220
1, 2, 4, 71, 142
その和は220
元の数と一致すれば友愛数になります。
求めるコードは・・・
# 友愛数を求める
def total_divisors(num):
return sum(sympy.divisors(num)[:-1])
def amicable_numbers(num):
# numの約数合計を求める
div1 = total_divisors(num)
# 約数合計の約数合計を求める
div2 = total_divisors(div1)
# 違いに一致すれば友愛数
if num==div2 and div1!=div2:
return div1
else:
return 0
for i in range(10 , 100000):
amicable = amicable_numbers(i)
if 0!=amicable:
print(i , amicable)
220 284
284 220
1184 1210
1210 1184
2620 2924
2924 2620
5020 5564
5564 5020
6232 6368
6368 6232
10744 10856
10856 10744
12285 14595
14595 12285
17296 18416
18416 17296
63020 76084
66928 66992
66992 66928
67095 71145
69615 87633
71145 67095
76084 63020
79750 88730
87633 69615
88730 79750
先ほどの完全数と違って
多く見つかりますね。
婚姻数
異なる 2 つの自然数の組で
1 と自分自身を除いた約数の和が
互いに他方と等しくなるような数
1 と自分自身を除いた約数の和が
互いに他方と等しくなるような数
例:
48の(1と自分自身以外の)約数
2, 3, 4, 6, 8, 12, 16, 24
その和は75
2, 3, 4, 6, 8, 12, 16, 24
その和は75
75の(1と自分自身以外の)約数
3, 5, 15, 25
その和は48
3, 5, 15, 25
その和は48
元の数と一致すれば結婚数になります。
求めるコードはこんな感じです。
# 結婚数を求める
def total_divisors_minus(num):
return sum(sympy.divisors(num)[1:-1])
def betrothed_numbers(num):
div1 = total_divisors_minus(num)
div2 = total_divisors_minus(div1)
# 違いに一致すれば結婚数
if num==div2:
return div1
else:
return 0
for i in range(10 , 100000):
betrothed = betrothed_numbers(i)
if 0!=betrothed:
print(i , betrothed)48 75
75 48
140 195
195 140
1050 1925
1575 1648
1648 1575
1925 1050
2024 2295
2295 2024
5775 6128
6128 5775
8892 16587
9504 20735
16587 8892
20735 9504
62744 75495
75495 62744
完全数よりは多そうですが
友愛すうよりは少ないですね。
こんな感じで見つかります。
これが求められたからといって
何か凄いことがある訳でも無いんですが
なかなか面白い数であるかなーとは
思いますので、暇な時にでも
思い出してみてください。
クイズとか使えるかもしれないですね。
それでは。

コメントする