import Data.Word import Data.Array.Unboxed crack :: Int -> [Word64] crack n = helper n 0 0 where helper 0 _ acc | acc == f acc = [acc] | otherwise = [] helper k n acc = concat [ helper (k-1) c (acc + ps!c) | c <- [n..9]] ps = listArray (0,9) (map (^13) [0..9]) :: UArray Int Word64 f 0 = 0 f a = (ps ! fromIntegral (a`mod`10)) + f (a`div`10) main = mapM_ print (crack 15)