Bash
ProjectEuler
数学

Project Euler Q45 【三角数, 五角数, 六角数】

Project Eulerをワンライナーで解いてみる。
間違っていたらコメントください。

問題

三角数, 五角数, 六角数は以下のように生成される.

三角数
$T_n=\frac{1}{2}n(n+1)$
$1, 3, 6, 10, 15, ...$
五角数
$P_n=\frac{1}{2}n(3n-1)$
$1, 5, 12, 22, 35, ...$
六角数
$H_n=n(2n-1)$
$1, 6, 15, 28, 45, ...$

$T_{285} = P_{165} = H_{143} = 40755$であることが分かる.

次の三角数かつ五角数かつ六角数な数を求めよ.

アプローチ

三角数、五角数、六角数をそれぞれ$n$について解くと、

T_n=\frac{1}{2}n(n+1) \\
n^2+n-2T_n=0 \\
n=\frac{-1±\sqrt{1+8T_n}}{2}
P_n=\frac{1}{2}n(3n-1) \\
3n^2-n-2P_n=0 \\
n=\frac{1±\sqrt{1+24P_n}}{6}
H_n=n(2n-1) \\
2n^2-n-H_n=0 \\
n=\frac{1±\sqrt{1+8H_n}}{4}

※±は解の公式上記載しただけであり、実際にはこれらの値が正にならなければならない為、マイナスは考えなくてよい。

解答

seq 99999 |
awk '{print $1*(2*$1-1)}' |
awk '{print $1,(1+sqrt(1+24*$1))%6}' |
awk '$2==0' |
awk '{print $1,(-1+sqrt(1+8*$1))%2}' |
awk '$2==0{print $1}' |
tail -1
1533776805

六角数は三角数であるらしいので、三角数の判断は不要かも。

答え合わせ

こちらのサイト様と一致していればOKとした。
http://kingyojima.net/pje/045.html