Bash
ProjectEuler
数学

Project Euler Q50 【連続する素数の和】

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

問題

素数$41$は$6$つの連続する素数の和として表せる:
$41 = 2 + 3 + 5 + 7 + 11 + 13.$

$100$未満の素数を連続する素数の和で表したときにこれが最長になる.

同様に, 連続する素数の和で$1000$未満の素数を表したときに最長になるのは$953$で$21$項を持つ.

$100$万未満の素数を連続する素数の和で表したときに最長になるのはどの素数か?

解答

seq 1000000 |
factor |
awk 'NF==2{printf $2" "}' |
awk '{for(i=1;i<=NF-1;i++){s=0;c=0;for(j=i+1;j<=NF;j++){if(1000000<=s+$j){break}else{s+=$j;c+=1}};print s,c}}' |
awk '21<$2' |
sort -k2,2nr |
awk '$0=$1' |
factor |
awk 'NF==2{print $2}' |
head -1
997651

まだ無駄な処理をしてる感は否めない。。

答え合わせ

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