Project Euler: Problem47

決して暇なわけではない。

import Data.List

prime = p [2..]
    where p (x:xs) = x : p (filter (\y -> rem y x /= 0) xs)
factor n = f n prime
    where f 1 _ = []
	  f n (p:ps) | rem n p == 0 = p : f (div n p) (p:ps)
		     | otherwise    = f n ps
finder 4 (x:_) = let r = product x in [r-4,r-3,r-2,r-1]
finder n (x:xs) | length (nub x) == 4 = finder (n+1) xs
		| otherwise           = finder 0 xs

main = print $ finder 0 $ map factor [2..]