2013-09-06

Project Euler - Problem 4

Categories: 数学 Lisp
euler_portrait.png

[ PR ]


Problem 4 「最大の回文積」

左右どちらから読んでも同じ値になる数を回文数という. 2桁の数の積で表される回文数のうち, 最大のものは 9009 = 91 × 99 である.

では, 3桁の数の積で表される回文数の最大値を求めよ

今回のポイントは、

  • 回文数を判断するために、数値から文字に変換する
  • 二重ループなので、回文数だとしても、前の結果よりも小さくなることがある
  • 結果が重複しないように、y > x の場合はスキップ

でしょうか。ただ、3つ目の条件で少し短縮していますが、今回のコードは今まで一番実行時間が遅く、sbclでコンパイルしても0.85秒でした。もう少し最適化できるかもしれないですね。

(defun prob4 ()
    (let ((result 0))
        (dotimes (x 1000)
            (dotimes (y 1000)
                (if (> y x) (return))
                (let ((s (write-to-string (* x y))))
                    (if (string= s (reverse s)) (setq result (max result (* x y)))))))
        result))

(print (prob4))

数学ガール (数学ガールシリーズ 1)
結城 浩
ソフトバンククリエイティブ
売り上げランキング: 8,733

コメントはTwitterアカウントにお願いします。

RECENT POSTS


[ PR ]

.