morris555's diary

高校生のブログです。

Problem 3

今回はProblem 3を…

素因数分解の問題ですね。

どこかでunfoldrを使った素因数分解を見た記憶があったので再現(?)してみました。

import Data.List

fac x = case [y | y <- [2..x], x `mod` y == 0] of
        []    -> Nothing
        [t]   -> Just (t, 0)
        (t:_) -> Just (t, x `div` t)

main = print . maximum . unfoldr fac $ 600851475143

こんな感じだったかな?

今までunfoldrなんて使ってなかったのでとても勉強になりました。

それにしてもunfoldrって便利ですね。