2013-09-06

Project Euler - Problem 3

Categories: 数学 Lisp
euler_portrait.png

[ PR ]


Problem 3 「最大の素因数」

13195 の素因数は 5, 7, 13, 29 である.

600851475143 の素因数のうち最大のものを求めよ.

今回のコードの基本的な方針は以下の通りです。

  • x = 2 から順に、mod (n , x) = 0 になるまで x += 1
  • 割り切れるならば、n /= x , result = xとして繰り返す

数字が大きいので、何か他のアルゴリズムが必要かと思いましたが、素直にやっても一瞬で答えが出ました。

(defparameter *target* 600851475143)

(defun prob3 (n &optional (x 2) (result -1))
    (let* ((is_rem_0 (zerop (rem n x)))
        (max_res (if is_rem_0 x result))
        (next_n (if is_rem_0 (truncate n x) n)))
        (if (= n 1) result
            (prob3 next_n (1+ x) max_res))))

(print (prob3 *target*)) ; 6857
数学ガールの秘密ノート/式とグラフ
結城 浩
ソフトバンククリエイティブ
売り上げランキング: 9,309

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

RECENT POSTS


[ PR ]

.