euler/Problem060.hs

25 lines
757 B
Haskell

-- 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)