import Data.List

divisor_count :: Integer -> Int
divisor_count n = length [x | x <- [1..n], rem n x == 0]

--triangles :: [Integer]
--triangles = undefined

triag :: [Integer]
triag = triag' 1 2
	where triag' s i = s:(triag' (s+i) (i+1))

rest60 :: Integer -> Integer
rest60 x = rem x 60

atkin :: Int -> [Integer]
atkin = undefined

prims :: Integer -> [Integer]
prims n = eres [2..n]
	where 
  eres (x:xs)
  	| x*x > n   = (x:xs)
  	| otherwise = x:eres (filter (\y -> rem y x /= 0) xs)

prim_factors :: Integer -> [Integer]
prim_factors 1 = []
prim_factors x = p:prim_factors (quot x p)
	where p = head $ filter (\y -> rem x y == 0) (prims x)

--divisor_count' :: Integer -> Int
divisor_count' x = product . map (succ . length) . group $ prim_factors x


main = do
	putStrLn . show $ filter (\x -> divisor_count' x >= 500) triag
