素因数分解
素朴な素因数分解のHaskell版
Integerを使っているので桁数を気にしなくてよい。
-------------------------------------------------- -- factors.hs -------------------------------------------------- import System.Environment(getArgs) -------------------------------------------------- -- num : dividend -- i : first divisor -- return minimum factor -------------------------------------------------- findMinFactor :: Integer -> Integer -> Integer findMinFactor num i | (mod num i) == 0 = i | otherwise = findMinFactor num (i+1) -------------------------------------------------- -- num : dividend -- return : list of factors -------------------------------------------------- findFactors :: Integer -> [Integer] findFactors num | f == num = [num] | otherwise = f : findFactors (div num f) where f = findMinFactor num 2 -------------------------------------------------- -- argument : dividend -- print list of factors -------------------------------------------------- main = do arg1:rest <- getArgs let x = read arg1 :: Integer let factors = findFactors x print factors