どーも、みつおです。
問題
三角数, 五角数, 六角数は以下のように生成される.
三角数 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