Project Eulerをワンライナーで解いてみる。
間違っていたらコメントください。
問題
$197$は巡回素数と呼ばれる. 桁を回転させたときに得られる数 $197$, $971$, $719$ が全て素数だからである.
$100$未満には巡回素数が$13$個ある: $2, 3, 5, 7, 11, 13, 17, 31, 37, 71, 73, 79,$ および$97$である.
$100$万未満の巡回素数はいくつあるか?
解答
seq 2 1000000 |
factor |
awk 'NF==2{print $2}' |
grep -v "[0|4|6|8]" |
grep -v "[2|5]." |
awk '{for(i=1;i<=length;i++){printf substr($1$1,i,length)" "};print ""}' |
while read line;do factor $line;echo "@";done |
tr '\n' ' ' |
tr '@' '\n' |
awk 'NF==(length($1)-1)*2' |
wc -l
55
偶数を$1$つでも含めば巡回素数ではないので偶数を除外した。
するとみるみるうちに対象が少なくなっていったので処理時間をグッと短くなった!
答え合わせ
こちらのサイト様と一致していればOKとした。
Project Euler 35 Circular primes below one million in C#