Project Euler: Problem41
pandigital の中で最大の素数を求める。1桁から9桁までの pandigital は40万個くらい。このままだとスタックオーバーフローする。
import Data.List pandigitals 0 _ = return 0 pandigitals n xs = do x <- xs xs' <- pandigitals (n-1) (filter (/=x) xs) return $ xs'*10 + x pandigital = concatMap (\n -> sort $ pandigitals n [n,n-1..1]) [9,8..1] primePandigital = loop 2 pandigital where loop n ps | n*2 > head ps = ps | otherwise = loop (n+1) $ filter (\x -> rem x n /= 0) ps main = print $ maximum primePandigital