2024.01.08
数学
コラッツ予想の確認
コラッツ予想とは、任意の正の整数nに対して以下の操作を繰り返すと「必ず1になる」という予想です。
具体的な計算例は以下のとおりです。
n=2 → 1 n=3 → 10 → 5 → 16 → 8 → 4 → 2 → 1 n=4 → 2 → 1 n=5 → 16 → 8 → 4 → 2 → 1 n=6 → 3 → 10 → 5 → 16 → 8 → 4 → 2 → 1
2024年1月現在、コラッツ予想の真偽は明らかにされていません。
Javaソースコード
CollatzProblem.java
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024
public class CollatzProblem { public static void main( String[] args ) { // 1~100まで確認する for ( int i = 1; i <= 100; i++ ) { // nにiを代入 int n =i; // 計算を繰り返す // nがコラッツ予想どおり1にならなければループを抜けません for ( ; ; ) { // nが1になったら計算を終了 if ( 1 == n ) break; if ( 0 == ( n % 2 ) ) n = n / 2; // 偶数の処理 else n = n * 3 + 1; // 奇数の処理 } // 結果の出力 System.out.println( "n=" + i + " → " + n ); } } }
実行結果
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis CollatzProblem.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac CollatzProblem.java
CollatzProblemを実行
C:\talavax\javasample>java CollatzProblem
CollatzProblemの出力結果
n=1 → 1 n=2 → 1 n=3 → 1 n=4 → 1 n=5 → 1 n=6 → 1 n=7 → 1 n=8 → 1 n=9 → 1 n=10 → 1 n=11 → 1 n=12 → 1 n=13 → 1 n=14 → 1 n=15 → 1 n=16 → 1 n=17 → 1 n=18 → 1 n=19 → 1 n=20 → 1 n=21 → 1 n=22 → 1 n=23 → 1 n=24 → 1 n=25 → 1 n=26 → 1 n=27 → 1 n=28 → 1 n=29 → 1 n=30 → 1 n=31 → 1 n=32 → 1 n=33 → 1 n=34 → 1 n=35 → 1 n=36 → 1 n=37 → 1 n=38 → 1 n=39 → 1 n=40 → 1 n=41 → 1 n=42 → 1 n=43 → 1 n=44 → 1 n=45 → 1 n=46 → 1 n=47 → 1 n=48 → 1 n=49 → 1 n=50 → 1 n=51 → 1 n=52 → 1 n=53 → 1 n=54 → 1 n=55 → 1 n=56 → 1 n=57 → 1 n=58 → 1 n=59 → 1 n=60 → 1 n=61 → 1 n=62 → 1 n=63 → 1 n=64 → 1 n=65 → 1 n=66 → 1 n=67 → 1 n=68 → 1 n=69 → 1 n=70 → 1 n=71 → 1 n=72 → 1 n=73 → 1 n=74 → 1 n=75 → 1 n=76 → 1 n=77 → 1 n=78 → 1 n=79 → 1 n=80 → 1 n=81 → 1 n=82 → 1 n=83 → 1 n=84 → 1 n=85 → 1 n=86 → 1 n=87 → 1 n=88 → 1 n=89 → 1 n=90 → 1 n=91 → 1 n=92 → 1 n=93 → 1 n=94 → 1 n=95 → 1 n=96 → 1 n=97 → 1 n=98 → 1 n=99 → 1 n=100 → 1
Javaソースコードの解説
ここから、ソースコードを上から順番に解説していきます。
001
public class CollatzProblem {
クラス名を、CollatzProblemとしています。
002
public static void main( String[] args ) {
このmainメソッドからプログラムを実行します。
003 004
// 1~100まで確認する for ( int i = 1; i <= 100; i++ ) {
005 006
// nにiを代入 int n =i;
008 009 010 011 012 013 014 015 016 017 018
// 計算を繰り返す // nがコラッツ予想どおり1にならなければループを抜けません for ( ; ; ) { // nが1になったら計算を終了 if ( 1 == n ) break; if ( 0 == ( n % 2 ) ) n = n / 2; // 偶数の処理 else n = n * 3 + 1; // 奇数の処理 }
020 021
// 結果の出力 System.out.println( "n=" + i + " → " + n );
変数iと変数nの値をprintlnメソッドでコンソール出力しています。変数nは全て1です。
以上です。