映画「博士の愛した数式」より

映画「博士の愛した数式」より
Masato Shimura
2006 年 1 月 26 日
目次
1
約数
2
2
完全数
2
3
友愛数
2
4
Script
4
小川洋子著の「博士が愛した数式」が映画になり、寺尾聡 深尾絵里 浅丘ルリ子吉岡秀
隆等のキャストで封切られた。1976 年頃の交通事故による記憶障害で、事故後は記憶が
√
80 分しか持たない数学者と家政婦、 と呼ばれる 10 才の家政婦の男の子が織りなすドラ
マで、愛したオイラーの数式の方は映画を見ていただくとして、この中に、友愛数、完全
数が出てきた。
「28 は完全数、まだ 30 個ほどしか発見されていない。最小は 6 だ。そして偉大な江夏
の背番号。」
⇒ 阪神ファンにはたまらない。
「君の誕生日は」
「2 月 20 日です。」
「僕の学長賞の時計は 284 番。のんきに皿洗いをしている場合ではない。良いかねこれ
は友愛数だ。約数を足し合わせると・・・」
約数
1
friend_sub0 6
3 2 1
friend_sub0 28
14 7 4 2 1
friend_sub0 496
248 124 62 31 16 8 4 2 1
+/ friend_sub0 496
496
完全数
2
自分自身を除く約数の和が自分自身と等しくなる数。
perfect 1000
6
6
28
28
496 496
計算には時間を要する。
3
友愛数
自分自身を除く約数の和が相互にパートナーとなる数。550 組発見されているようだ。
発見された数は奇数同士か偶数同士であるがその先は不明である。
friend_sub0 220
110 55 44 22 20 11 10 5 4 2 1
+/ friend_0 220
284
friend_sub0 284
142 71 4 2 1
+/
friend_sub0 284
220
friend 2000
NB. list は完全数を含む。 また他約数も出している。
+----+----+---------+
|6
|6
| 6 6
|
|
|
|25 6
|
+----+----+---------+
|28
|28
|28 28
|
+----+----+---------+
|220 |284 |284 220
|
+----+----+---------+
|284 |220 |220 284
|
|
|
|
|562 284
+----+----+---------+
|496 |496 |496 496
|
|
|
|
|652 496
+----+----+---------+
|1184|1210|1210 1184|
|
|
|1336 1184|
+----+----+---------+
|1210|1184|1184 1210|
|
|
|1490 1210|
|
|
|1604 1210|
|
|
|1898 1210|
+----+----+---------+
4 Script
力任せの総当たり法である。
Usage: friend 300
friend_sub0=: 3 : 0
NB. find yakusuu
NB. Usage: u. 220
TMP1=. (2 x: TMP0=. y. % >:i. y.)
{."1 }.(1= 1{"1 TMP1) # TMP1
)
friend_sub1=: 3 : 0
TMP2=: (i.y.),. ; +/ L:0 friend_sub0 L:0 {@> i. y.
TMP3=: (/:{:"1 TMP2){ TMP2
TMP4=:(˜: 1{"1 TMP3)<;.1 TMP3
NB. TMP5=: |."1 L:0 TMP4
)
perfect=:3 : ’(=/"1 tmp)# tmp=.; 2}. friend_sub1 y.’
friend=: 3 : 0
NB. friend 2000
TMP5=:
2}. friend_sub1 y. NB. drop 0 1
TMP6=:
|. "1 L:0 TMP5
MAX=: >: >./ {:"1 ;TMP5 NB. +1
IND5=:( i. MAX) e.
{."1 /:˜ ;TMP5
TMP7=: {@>(i. MAX),. {:"1
IND6=:( i. MAX) e. tmp=:
TMP8=:IND6 expand_box
TMP9=: TMP7,.TMP8
IND5 expand_0 /:˜ ;TMP5
/:˜ ;{. L:0
TMP6
{. L:0
TMP6
TMP11=: sel_sub TMP9
TMP12=:(1{"1 TMP11) ,. }. "1 L:0{:"1 TMP11
(; +/ L:0 ({. "1 TMP12) = L:0 {:"1 TMP12) # TMP11
)
sel_sub=: 3 : 0
TMP10=:(1{"1 y.) ,. }. "1 L:0{:"1
(* ;
y.
+/ L:0 ({. "1 TMP10) * L:0 {: "1 TMP10) # y.
)
expand_0=:4 : ’((x. # tmp) i. tmp=. i. # x.){y., 0’
expand_box=:4 : ’((x. # tmp) i. tmp=. i. # x.){y., <0’