TOP 自分の思い 邪馬台国 バイク 瓢箪 霊場巡り 囲碁と将棋 CAD/CAM 生産管理 海外の思い出 索引
問題の研究
当時の私がこの問題に対し、どの程度考えたのか、おおまかに説明したい
まず単純に計算してみると、およそ10000位までは全て計算結果は1になる
ここまでは力ずくで判っている
仮に答としてnがあったとする(n>10000)
自然数の数列の上でこのnがどのようにふるまうかを考えると、3倍して1を足し
2で割れるが絶対に4では割れない(割れたらnより小さい奇数になり矛盾する)
その数をn1とする、以下計算して得られた奇数の群(n、n1、n2、・・・・)が存在
し、ある回数繰り返すともとの数、nになる
ここでn1、n2、・・・は全てnより大きな数でなくてはならない
この奇数の群を見つける問題に変換できる
10000より大きい数では3倍した後1を足してもほとんど3倍した数と大きさは
変らない、つまりnとはnの3の階乗と2の階乗の非常に接近した数であるはず
である
例えば、3の2乗と2の3乗は9と8で1しか違わない
さらに3の階乗の方が少しだけ小さい(10000分の1以下)事が要求される
3倍して1を足すからである
そういう数でたまたま3倍して1を足した正規の計算でイコールの数がnとなる
数字を探す事になる
ところで3のx乗と2のy乗を比較してみると
3 2 3倍して1を足した
4
8
9 16 (12)
27 32 (39)
64
81 128 (120)
243 256 (363)
512
729 1024 (1092)
2048
2187 4096 (3279)
6561 8192 (9840)
16384
19683 32768 (29523)
59049 65536 (88572)
131072
となって、なかなか近い数字が表れない
これが離れれば離れるほど、間に介在する奇数が増える事になる
なぜなら3倍して1を足し、奇数になるまで2で割るのであるから、3を掛けた
数は1を足し2で割った後、全て求める群に含まれれなければならない
それまでの数が全て最終的に1になったのに、そうならない数が接近した状態
でたくさん存在する事になる
だから有り得ないとは言わないが、確率的に非常に低いと言う事は間違いない
可能性が高いのがせいぜい10個程度の群で構成されているケースである
求める群が非常に少ない数で構成されているとすると、可能性が高いのが3の
5乗の項で729と1092の間に1024がある、どの程度の数字ならば1092で
なく1024に近いのかは計算可能である
誤差の大きさは、(1092−1024)/1024=6.6%
3の5乗で一致するとすれば、せいぜい20〜100位の数字でないとつじつまが
合わない
そこで実際に計算してみると、
55が39番目に53になるが、その前に55より小さい数字が何回か表れる
55より小さい数字はその前の段階で全て1になる事が検証されているので矛盾
する、事実その後1に終息する
次は63だが34番目に61になる、34番目以前に小さい数字は無い
この2件は偶然近い数字になったと判断できる
そうではなくて5番目に予想通り近い数字になったのは
73が5番目に71
109が5番目に107
の2件だけである
この2件がイコールにならないということは、個数が五個の群は存在しないと言う
事になる
例えば10000の近辺で計算してみる
ただし、3倍して1を足した結果の偶数を2で割るとみな1になってしまうので、便
宜上3倍して1を足すのを繰り返し、1024X10000と比較する
10001、30010、90033、270102、810309、2431230、7293633
つまり10240000よりも相当小さい
求めるnは10000よりも大きい数字では3の5乗つまり、計算を5回繰り返す以上
の回数でないとNと同じ数にはならない
100の近辺だと1024に1092が近ずくが、既に計算済で該当する数字は無い
また、仮にnの次のn1が729のように5乗した値だとすると、間に入る奇数は全
てnより大きく5個以上存在するはずである
5回繰り返したレベルでの1を足した数字の増分は10000近辺ではおよそ
7290000/7293633=0.05%
先ほど2の階乗との誤差10000分の1程度と見積もったが計算した結果も
それよりは大きいがそれでも相当に小さい誤差である事が判る
仮にnが10000近辺でなく100000近辺だとすると、誤差は0.005%程度となる
2の階乗と3の階乗とでこれほど近い物は10乗程度の組合せの中では存在しな
い、従って全ての奇数は3倍して1を足し、奇数になるまで2で割って・・・を繰り返
すと全て1になる
とても証明と呼べるようなものではないが、仮に求める数nがあったと仮定すると
その後に続く奇数n1、n2・・・はnのたかだか1000倍した中に最低5個存在する
事になる
これがありえないのである
これは次に近い3の10乗近辺でも同じである
先ほどと同様の調査で30000まで調べたが、10回目に元の数nに近い数は1
件もない
ちなみに、何回か計算を繰り返し、間にnより小さい数字がなく、非常に近い数字
(プラスマイナス2以内)になるのは先ほどの63の他には10000以下では1件も
ない、もとの数nより大きくなったり小さくなったりと繰り返しながら偶然nに近い数
字になるものは幾つかあるが、一度でも小さくなればそれは1に終息する事が
そこまでの計算過程で証明されているので、絶対にnにはならない
毎回3倍するのと、2の階乗で割るのとどちらが大きいかを計算すると、2の階乗
の方が大きい、つまり回数を重ねるほど小さくなる確率が増大することになる
そのため、この計算を繰り返すことで基のnになるためには、比較的小さい群で
なければならない、これがせいぜい10個程度の群と予想した根拠である
実は学生時代に検討したのはこの確率であった
しかし、10000までの中で該当しそうな数字が2桁の数字で3個しかなく、それら
が全てニアピン賞であることから、それ以上大きな数字を計算しても該当する群
は存在しないと考える
念のため20000まで計算したが一つもなかった
私が使用したプログラムを参考までに掲載する
言語はXBAISICというBAISICに構造化言語の良さを取り入れた非常に使い勝手
の良い言語である
インタープリタモードの他、コンパイラも付いている
なにより優秀なのは今回の様に大きな数を扱うために、64ビットの自然数を扱う
事が出来る事にある
並の言語ではせいぜい10000程度の数を計算するだけで桁あふれし、私が
学生時代にやらかした失敗をする羽目になるだろう
プログラムはまず関数が64ビット自然数であることを定義する所から始まり、計算
をスタートする数を設定する、そこから、N4で10000先まで計算する
途中どのような経過で1に終息したのか1行に10個単位で表示する
100回計算しても1にならない場合は念のためストップするようにしてある
またもとの数と2以下の差の場合も中断し、継続するか確認できる
恐るべきことに20000を超えると、100計算しても1にならない数が幾つか存在する
input文は計算を中断するためであって、使用しているX2は計算では使用しないので
数字であれば何でもよいから入れると計算を継続する
他の言語系でも簡単に移植できるように構造化でなくgoto文だけで記述
した、いわゆるN88BASIC仕様である
XBAISICはフリーソフトであり、ネットで検索しロードさせていただいた
こういったちょっとした計算では大変重宝している
作者の方に感謝を申し上げる
Dim N as Qword
Dim N2 as Qword
Dim N3 as Qword
Dim N4 as Qword
Dim N5 as Qword
Dim N6 as Qword
Dim C as integer
Dim C2 as integer
Dim X as Qword
Dim X2 as Qword
N=20001
N4=N+10000
N5=N
C=1
C2=1
*L1
N3=N*3+1
*L3
N2=N3/2
if N2=1 then goto *L4
X=N3-N2*2
if X=1 then goto *L2
N3=N2
goto *L3
*L2
C=C+1
C2=C2+1
if N<N4 then print N3;" ";
if C>10 then C=1:print " "
if C2>100 then input X2
if N3>N5 then N6=N3-N5 else N6=N5-N3
if N6<3 then input X2
N3=N3*3+1
goto *L3
*L4
C=1
C2=1
N=N+2
N5=N
if N<N4 then print " ":print N;" "
if N>N4 then goto *L5
goto *L1
*L5
end
TOP 戻る