どーも、みつおです。
問題
三角数, 五角数, 六角数は以下のように生成される.
三角数 Tn=n(n+1)/2 1, 3, 6, 10, 15, … 五角数 Pn=n(3n-1)/2 1, 5, 12, 22, 35, … 六角数 Hn=n(2n-1) 1, 6, 15, 28, 45, … T285 = P165 = H143 = 40755であることが分かる.
次の三角数かつ五角数かつ六角数な数を求めよ.
出典:Problem45
解答
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Problem45
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Solve());
Console.ReadLine();
}
private static long Solve()
{
long ret = 0;
long cnt = 0;
long cntsankaku=2, cntgokaku=2, cntrokkaku=2;
//三角数、五角数、六角数
long sankaku=3,gokaku=5,rokkaku=6;
while(true)
{
//三角数、五角数、六角数が全て等しい
if (sankaku == gokaku && sankaku == rokkaku)
{
cnt++;
ret = sankaku;
if (cnt == 2) break;
}
//三角数が最小
if (sankaku <= gokaku && sankaku <= rokkaku)
{
//三角数を計算
sankaku = (cntsankaku * (cntsankaku + 1)) / 2;
//三角数の項を増やす
cntsankaku++;
continue;
}
//五角数が最小
if (gokaku <= sankaku && gokaku <= rokkaku)
{
//五角数を計算
gokaku = (cntgokaku * (3 * cntgokaku - 1)) / 2;
//五角数の項を増やす
cntgokaku++;
continue;
}
//六角数が最小
if (rokkaku <= sankaku && rokkaku <= gokaku)
{
//六角数を計算
rokkaku = cntrokkaku * (2 * cntrokkaku - 1);
cntrokkaku++;
continue;
}
}
return ret;
}
}
}
出力
1533776805