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