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

Haskell で Project Euler を解く素人遊び

Problem 26

1000以下の自然数の逆数で、循環少数の周期が一番長い数を求める。

はじめは与えられたdに対して、循環少数の表記を返す関数を考えたが、なんとなくしっくりこないものしか作れなかった。1/14のように、途中から周期的になる数の扱いが煩雑になりそうなので、逆に剰余を見る関数に方針転換。同じ余りが出たら循環が始まるので、割り算の筆算をしながら余りをリストに格納していくことで問題を単純化できた気がする。

elemはリストを全走査するため、基本的には計算が遅くなる。なるべく使わないようにしているが、今回のケースでは良しとした。

循環少数の表記は得られないのが気持ち悪いが、問題を解く上では差し支えないので、許していただくということで。

意外と手強かった☆