驚くことに各桁の数の4乗の和が自分自身になるような数は3つしかない。 1634=1^4+6^4+3^4+4^4, 8208=8^4+2^4+0^4+8^4, 9474=9^4+4^4+7^4+4^4
1^4=1は和ではないのとで含めない。
これらの数の和は1634+8208+9474=19316となる。
各桁の数の5乗の和が自分自身になるような数の和を求めよ。
条件を満たす数がn桁としたとき、それぞれの桁の数の5乗の和というのは最大 で9^5*nなので、9^5*nがn桁になる必要がある。すると条件を満たす数は最大で も6桁、しかも9^5*6以下ということがわかるので、ここでは2から300000の数の リストについてfilterで判定を行いsumを用いて和を求めることにする。
各桁の5乗の和が元の数に等しいかをチェックするローカル関数fpは以下のよう に定義をそのままプログラムにしたものとする。ソースコード的美しさにはか けるが一応答えは求まる。
euler030 = sum $ filter fp [2..300000]
where fp n = let n1 = n `mod` 10
n2 = (n `mod` 100) `div` 10
n3 = (n `mod` 1000) `div` 100
n4 = (n `mod` 10000) `div` 1000
n5 = (n `mod` 100000) `div` 10000
n6 = (n `mod` 1000000) `div` 100000
in n1 ^ 5 + n2 ^ 5 + n3 ^ 5 + n4 ^ 5 + n5 ^ 5 + n6 ^5 == n
