//マイナスの数字でコラッツ算 class Mcolla { public static void main(String args[]) { long L=-1; int loopcheck=1; long checka=1; int loopnumber=0; for (int Lnum=-2; Lnum>-1000000; Lnum--) { // System.out.println (Lnum); L=Lnum; int k=1; while (k==1) { if ( L !=- 1 ) { if ( checka==L ) { k=13; System.out.println ("ループ数だった" + Lnum + "。サンプル判定数は" + checka); loopnumber++; loopcheck = 1; } else { // System.out.print ("ループ数じゃない" + L + Lnum + "。"); } // 1000回目の計算を判定サンプルとして抽出。1000回目以降にloopが起きる場合は対応できない。(このプログラムの欠点) if ( loopcheck == 1000 ) { checka=L; } if ( L % 2 != 0 ) { // 奇数 L=L*3; L=L+1; } else { // 偶数 L=L/2; } // System.out.print ("途中" + L); loopcheck++; // System.out.println ("loop回数" + loopcheck + "数" + Lnum); } else { System.out.println ("コラッツ算成功" + Lnum); k=13; loopcheck = 1; } } } System.out.println ("ループ数の数" + loopnumber); } }