-- Find the lowest sum for a set of five primes for which any two primes -- concatenate to produce another prime. import Euler import Debug.Trace import Data.Array.Unboxed ((!)) nDigits n = ceiling $ logBase 10 $ max 1 $ fromIntegral n a ## b = (a * (10 ^ nDigits b)) + b main = print $ head $ do a <- drop 4 primes b <- takeWhile (< a) primes guard $ all isPrime $ [(## b), (b ##)] <*> [a] --traceM $ show (a,b) c <- takeWhile (< b) primes guard $ all isPrime $ [(## c), (c ##)] <*> [a,b] --traceM $ show (a,b,c) d <- takeWhile (< c) primes guard $ all isPrime $ [(## d), (d ##)] <*> [a,b,c] e <- takeWhile (< d) primes guard $ all isPrime $ [(## e), (e ##)] <*> [a,b,c,d] let xs = [a,b,c,d,e] return (sum xs, xs)