-- module Main where import Data.IntSet (size) import Data.List (unfoldr) import Math.NumberTheory.ArithmeticFunctions (divisorsSmall) main :: IO () main = print ans -- triangleNumber :: Integer -> [Integer] -- triangleNumber 1 = [1] -- triangleNumber n = sum [1..n] : triangleNumber (n-1) triangleNumber i = (i * (i + 1)) `div` 2 triangleNumbers = map triangleNumber [1..] -- triangleNumbers :: [Int] -- triangleNumbers = unfoldr (\b-> Just (sum [1..b],b+1)) 1 -- isDivisible a b = a `rem` b == 0 -- divisors n = filter (isDivisible n) [1..(floor . sqrt) n ] -- Triangle Numbers With More than N divisors tnwmtNd :: Int -> [Int] tnwmtNd n = filter ((>= n) . size . divisorsSmall) triangleNumbers ans :: Int ans = head $ tnwmtNd 500 {- λ> main 76576500 (0.00 secs, 114,944 bytes) First triangle number to have over 500 divisors is 76576500 -}