2013-09-06
Project Euler - Problem 4
[ 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)
posted with amazlet at 14.01.17
結城 浩
ソフトバンククリエイティブ
売り上げランキング: 8,733
ソフトバンククリエイティブ
売り上げランキング: 8,733