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

Haskell で Project Euler を解く素人遊び

Problem 37

3797は切り捨て可能(truncatable)な素数である。すなわち、それ自身も素数でありながら、右から順次切り捨てた379,37,3も全て素数であり、また左から順次切り捨てた797,97,7もまた全て素数である。このような11個の素数を見つけ、その和を求める。

これまた素数の探索なので、速度のことは脇において、一つづつ必要な部品を組み上げて答えにたどり着くことを考える。まず切り捨ての関数。これはData.List にある tails や inits を使うのが便利そうだ。ここまでの経験として、自分で実装できるような単純な関数でも、ライブラリのものを使うほうが効率が圧倒的に良いケースが多い。なので、ライブラリの知識を増やすことは非常に役に立つと感じる。

あとは定義に従って評価する関数を用意するだけである。

素数を調べるのは楽しい☆