コラッツの予想とは
任意の自然数 N に対して
(1) N が偶数であれば M = N/2 を算出する
(2) N が奇数であれば M = 3N + 1 を算出する
として次の N = M としてこの演算を繰り返していけば M は必ず 1 に帰結する
というのがコラッツの予想であった。
_
これをRPGプログラムで書くと次のとおり。
[RPG : TESTCRT ]
ソースはこちらから
0001.00 H DFTNAME(TESTCRT) DATEDIT(*YMD/) BNDDIR('QC2LE') 0002.00 F********** コラッツの予想 ******************************************** 0003.00 F* 0004.00 F********************************************************************** 0005.00 0006.00 * CRTRPGMOD OBJ(QTEMP/TESTCRT) SRCFILE(R610SRC/QRPGLESRC) 0007.00 * DBGVIEW(*SOURCE) AUT(*ALL) 0008.00 * CRTPGM PGM(ASNET.COM/TESTCRT) MODULE(QTEMP/TESTCRT) ACTGRP(*NEW) 0009.00 * AUT(*ALL) 0010.00 0011.00 *-------------------------------------------------------------------* 0012.00 * 2023/03/11 : 作成 0013.00 *-------------------------------------------------------------------* 0014.00 *( 作業変数 ) 0015.00 D N S 4S 0 0016.00 D M S 4S 0 0017.00 D AMARI S 4S 0 0018.00 0019.00 C ' 自然数 ?' DSPLY NSU 10 0020.00 *( コンラッツ予想を計算 ) 0021.00 C EVAL N = %DEC(NSU:4:0) 0022.00 C IF N > 0 0023.00 C DO *HIVAL DO-*HIVAL 0024.00 C N DIV 2 M 0025.00 C MVR AMARI 50 0026.00 C IF *IN50 = *ON 偶数 0027.00 C EVAL N = M 0028.00 C ELSE 奇数 0029.00 C EVAL N = N * 3 + 1 0030.00 C ENDIF 0031.00 *( 結果を表示 ) 0032.00 C EVAL NSU = 'N = ' + %CHAR(N) 0033.00 C IF N = 1 N = 1 0034.00 C NSU DSPLY ANS 2 0035.00 C LEAVE 0036.00 C ELSE 0037.00 C NSU DSPLY 0038.00 C ENDIF N = 1 0039.00 C ENDDO DO-*HIVAL 0040.00 C ENDIF 0041.00 C SETON LR 0042.00 C RETURN
[コンパイル]
CRTBNDRPG PGM(OBJLIB/TESTCRT) SRCFILE(R610SRC/QRPGLESRC) DFTACTGRP(*NO) ACTGRP(*NEW) DBGVIEW(*SOURCE) AUT(*ALL)
[実行]
DSPLY 自然数 ? 7 DSPLY N = 22 DSPLY N = 11 DSPLY N = 34 DSPLY N = 17 DSPLY N = 52 DSPLY N = 26 DSPLY N = 13 DSPLY N = 40 DSPLY N = 20 DSPLY N = 10 DSPLY N = 5 DSPLY N = 16 DSPLY N = 8 DSPLY N = 4 DSPLY N = 2 DSPLY N = 1
[解説]
任意の自然数に何を指定しても N = 1と表示されて終了することがわかる。
これを数学的に証明することが問題である。
プログラムとしてはやさしく作成できたはずである。解答は計算のプロセスも表示できるようにしてある。
ところでこれを見てお気づきのように
最後のほうでN = 16 となれば N= 8, 4, 2, 1 と
限りなく 1に収束していることがわかる。
つまり
任意の奇数 N に対して 3N + 1 が 8ヤ16 のような 2の累乗になったときは
1に収束するのである。
このことを証明すればコンラッツの予想は証明できたことになる。
また面白いことにRPGにしておくと 3N + 1 ではなく 3N + 2 にしてみる
実験もRPGのソースを修正するだけで簡単に試すことができる。
もちろん 3N + 2 では途中から N が大きくなりすぎて
収束することはできない。やはり 3N + 1 においてのみ成り立つと
言えそうである。
このように数学もプログラムで試行することができる。
フェルマーの最終定理もRPGで試行することができるかも知れない。
RPGでこんなにも簡単に実証プログラムを作れるのだから
証明も何とかできるような気もするが。