LoginSignup
2
2

More than 5 years have passed since last update.

Project Euler Q44 【五角数】

Posted at

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

問題

五角数は $P_n = \frac{1}{2}n(3n-1)$ で生成される. 最初の$10$項は
$1, 5, 12, 22, 35, 51, 70, 92, 117, 145, ...$

である.

$P_4 + P_7 = 22 + 70 = 92 = P8$ である. しかし差 $70 - 22 = 48$ は五角数ではない.

五角数のペア $P_j$ と $P_k$ について, 差と和が五角数になるものを考える. 差を $D = |P_k - P_j|$ と書く. 差 $D$ の最小値を求めよ.

アプローチ

$P_n = \frac{1}{2}n(3n-1)$を$n$について解くと、$n=\frac{1±\sqrt{1+24P_n}}{6}$となる。
$P_k±P_j$を計算した結果を上記に代入して整数になればよい。

解答

seq 9999 |
awk '{print $1*(3*$1-1)/2}' |
awk '{for(i=NR-1;1<=i;i--){v=i*(3*i-1)/2;p=$1+v;m=$1-v;if((1+sqrt(1+24*p))%6==0&&(1+sqrt(1+24*m))%6==0){print m;break}}}' |
sort -k1,1n |
head -1
5482660

seq 999から始められればフィルタコマンド(といっても結局awk)のつなぎ合わせで求められるが、seq 9999からでないと求められないのでawkで長ったらしく書いた。
awkforbreak大切!と思ったが、今回の場合はifではじかれているだけだった様子。

答え合わせ

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

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2