トップページに戻る
次の増井さんの書籍の問題へ
前の増井さんの書籍の問題へ
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を発見。
解説
ナイーブに実装してます。