のてすきあ − 完全独習非プログラマー −

Haskell で Project Euler を解く素人遊び

Problem 35

197は素数だが、その循環である971, 719 もまた素数である。1,000,000までの中に、そのような循環素数はいくつあるか。

素数を探索しなければならない時点で、速さはある程度諦めざるを得ない。色々と考えたが、やっぱり素数探索は簡単には早くならない。

循環はいくつかの表現方法があると思うが、++演算を使いたくなかったので、なんとなくでこの形にした。

isPrime に偶数を排除する行を追加しているので、少し変な形をしている。これは素数判定のために、そもそもisPrimeは奇数しか判定しない構成になっていたのだが、循環素数の評価では偶数も評価しなければならなくなったためである。例えば、41は素数だが、その循環も素数かどうかを判定するためには、14を評価しなければならない。奇数だけを評価する通常のisPrimeとは少し違うのである。

素数リストの走査を早くしたい☆