トップページに戻る    次の増井さんの書籍の問題へ    前の増井さんの書籍の問題へ

Q06 (改造版) コラッツの予想


C#のソース

using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static void Main()
    {
        int AnswerCnt = 0;

        for (int I = 2; I <= 10000; I += 2) {
            var KouList = new List<int>();
            KouList.Add(I);

            bool FirstFlag = true;
            while (true) {
                int CurrKou = KouList.Last();
                int NextKou;
                if (FirstFlag) {
                    FirstFlag = false;
                    NextKou = CurrKou * 3 + 1;
                }
                else NextKou = DeriveNextKou(CurrKou);

                int wkInd = KouList.FindIndex(X => X == NextKou);
                if (wkInd < 0) {
                    KouList.Add(NextKou);
                    continue;
                }
                if (KouList[wkInd] == I) {
                    AnswerCnt++;
                    Console.WriteLine("解{0}として{1}を発見。", AnswerCnt, I);
                }
                break;
            }
        }
    }

    //コラッツの予想での次の項を求める
    static int DeriveNextKou(int pTarget)
    {
        if (pTarget % 2 == 0) return pTarget / 2;
        return pTarget * 3 + 1;
    }
}


実行結果

省略
解30として1822を発見。
解31として2308を発見。
解32として2734を発見。
解33として3238を発見。
解34として7288を発見。


解説

ナイーブに実装してます。