52問目
http://projecteuler.net/index.php?section=problems&id=52
125874は2倍すると251748となり、元の数と同じ数字で構成されている。同様に2倍、3倍、4倍、5倍、6倍した数が全て同じ数字で構成されるような数を求める。
6倍しても桁数が変わらないことから、元の数の範囲が狭められます(3桁であれば166以下)。あとはその範囲で順番に調べていきます。
import Data.List main = print $ euler052 euler052 :: Integer euler052 = head $ filter sameDigits $ numbers sameDigits :: Integer -> Bool sameDigits x = all (== (sort $ show x)) (map (sort . show . (* x)) [2..6]) numbers :: [Integer] numbers = concat [[10^i..(div (10^(i+1)) 6)] | i <- [1..]]