import Data.List m `divides` n = n `mod` m == 0 divisors n = [m | m<-[2..n `div` 2], m `divides` n] primes = [n | n <- [2..], null (divisors n)] solution y = concatMap f $ tails $ takeWhile (<=y) primes where f l = [l | (l,z) <- takeWhile ((<= y) . snd) $ zip (inits l) (scanl (+) 0 l), z == y]