77問目
http://projecteuler.net/index.php?section=problems&id=77
10 を素数の和として表す方法は 5 通りある。素数の和として 5000 より多い方法で表せる最初の数を求める。
まっすぐ計算。何も工夫してません。
main = print $ euler077 5000 euler077 :: Integer -> Integer euler077 m = head $ filter (\ n -> (partByPrimes n n) > m) [1..] partByPrimes :: Integer -> Integer -> Integer partByPrimes 0 _ = 1 partByPrimes n 2 = 1 - (mod n 2) partByPrimes n m = sum [ partByPrimes (n - x) x | x <- takeWhile (<= (min n m)) primes ] primes :: [Integer] primes = 2 : filter isPrime [3..] isPrime :: Integer -> Bool isPrime x = all ((/= 0) . mod x) $ takeWhile (<= (floor $ sqrt $ fromIntegral x)) primes