project euler problem 30

問題どおりだと以下のとおり

Prelude Data.List> let f x= g $ show x ; g []=0;g (x:xs)=((read [x])::Int)^4+ g xs in [x|x<-[2..9999],f x==x]
[1634,8208,9474]
(0.30 secs, 132602804 bytes)

どうも色々実験すると6桁以内なので

main=print $ sum $ filter (\x->f x==x) [2..999999]

f x= g $ show x

g []=0
g (x:xs)=((read [x]):: Integer )^5+ g xs


実験内容

Prelude> 9^5*6
354294
Prelude> 9^5*7
413343
Prelude> map (length.show) $ map (\x->9^5*x) [1..10]
[5,6,6,6,6,6,6,6,6,6]

ということで 各桁を五乗したものを足しても6桁以上にならない。