Life Goes On

まあまあだけど楽しんでる方です

46問目

http://projecteuler.net/index.php?section=problems&id=46
Christian Goldbachは、「素数でない奇数は全て、平方数の2倍と素数の和として表せる」と予想したが、これは誤りだった。この予想を満たさない最小の数を求める。
どう表現するかというところはありますが、問題自体はそれほど難しくありません。

main = print $ euler046

euler046 :: Integer
euler046 = head [ x | x <- [3,5..], (not . isPrime) x,
    all (not . isPrime) $ takeWhile (> 0) $ [ x-2*(n^2) | n <- [1..] ] ]

isPrime :: Int -> Bool
isPrime x = all ((/= 0) . mod x) $ 
    takeWhile (<= (floor $ sqrt $ fromIntegral x)) primes

primes :: [Integer]
primes = 2 : filter isPrime [3..]