Problem 3

http://projecteuler.net/index.php?section=problems&id=3

素数

-- Prime.hs
module Prime (primes, primeFactors) where
primes :: [Integer]
primes = 2 : filter isPrime [3,5..]

isPrime :: Integer -> Bool
isPrime q = all ((/= 0) . mod q) belowPrimes
    where belowPrimes = takeWhile (<= (floor . sqrt . fromIntegral) q) primes

primeFactors n = f n primes
    where f 1 _ = []
          f n ps@(p:ps') | n `mod` p == 0 = p : f (n `div` p) ps
                         | otherwise      = f n ps'
import Prime

main = print $ last $ primeFactors 600851475143