最大約数
さあ、Haskellで数学を解こう!フィボナッチに続き、今日二つ目。
600851475143の素因数のうち最大のものを計算せよ、という問題。
main = print $ pickup $ filter ans [1,3..600851475141] ans :: Int -> Bool ans n | 600851475143 `mod` n == 0 = True | 600851475143 `mod` n /= 0 = False pickup :: [Int] -> Int pickup (x:xs) | xs == [] = x | otherwise = pickup xs
ans関数を使って600851475143の約数を抽出、pickup関数で、生成したリストの一番右にあるもの、つまり最大のものを取りだします。
一行目のリストが、[1,3..600851475141]となっているのは、偶数を排除し計算回数を減らすのと、600851475143自身で割ってしまうことを防ぐため。