Project Euler (Problem ID 6..10)
ID 8が難しかった…
ID 9は、ストレートに書くとスピードが足りなかったので、コードをいじっているうちに、なんだかごちゃごちゃした感じに。
問題固有のサブ関数は、whereで束ねた方が良いのかなぁ?
ID 6..10
import List prog006 = sqrOfSum - sumOfSqr where sqrOfSum = sqr $ sum [1..100] sumOfSqr = sum $ map sqr [1..100] sqr n = n * n prog007 = last $ take 10001 $ primes prod5seq n = foldr (*) 1 [n..(n + 4)] the1000digit = 7316717653133062491922511967442657474235534919493496983 -- 後略 prod5digit n = prod n 10000 where prod n 1 = n prod n d = q * prod r (div d 10) where (q, r) = divMod n d prog008 = foldl max 0 $ map prod5digit $ map read $ filter (\n -> length n == 5) $ map (take 5) $ tails $ show the1000digit pythag n = [[a, b, c] | c <- [(div (4 * n) 10)..(div n 2)], b <- [((div (n - c) 2) + 1)..(c - 1)], a <- [n - (b + c)], a * a + b * b == c * c] prog009 = map product $ pythag 1000 prime1414 n = and $ map (not . isMultiple n) $ primes1414 where isMultiple n p = ((div n p) > 1) && ((mod n p) == 0) prog010 = sum $ filter prime1414 [2..(2 * 1000 * 1000)] primes1414 = takeWhile ((>) 1415) $ primes main = putStrLn $ show $ prog010