PEをMathematicaで

Project Eulerに挑戦してみよう

Project Euler 26 / 逆数の循環節その1

単位分数とは分子が1の分数である。分母が2から10の単位分数を10進数で表記すると次のようになる。

  • 1/2 = 0.5
  • 1/3 = 0.(3)
  • 1/4 = 0.25
  • 1/5 = 0.2
  • 1/6 = 0.1(6)
  • 1/7 = 0.(142857)
  • 1/8 = 0.125
  • 1/9 = 0.(1)
  • 1/10 = 0.1

0.1(6)は 0.166666... という数字であり,1桁の循環節を持つ。1/7 の循環節は6桁である。

d < 1000 なる 1/d の中で小数部の循環節が最も長くなるような d を求めよ。

Problem 26 - Project Euler


循環節は RealDigits で求められますが,「有限小数」「小数点以下すぐに循環がはじまる数」「小数点から何桁かあとに循環がはじまる数」で表示が異なります。

RealDigits[1/n] に続けて First→Last で循環節を取り出して,Length で長さを求めます。有限小数の場合,(循環節の長さ)=1という正しくない結果を返しますが,この問題を解くのに影響はないので無視しました。

このようにして循環節の長さのリストを作って,最大値を求めます。