-- Highly divisible triangular number -- Problem 12 -- The sequence of triangle numbers is generated by adding the natural numbers. -- So the 7th triangle number would be 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. -- The first ten terms would be: -- 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ... -- Let us list the factors of the first seven triangle numbers: -- 1: 1 -- 3: 1,3 -- 6: 1,2,3,6 -- 10: 1,2,5,10 -- 15: 1,3,5,15 -- 21: 1,3,7,21 -- 28: 1,2,4,7,14,28 -- We can see that 28 is the first triangle number to have over five divisors. -- What is the value of the first triangle number to have over five hundred divisors? main = do print (trial_division 2 10) print (find_triangular 1) find_triangular :: Int -> Int find_triangular n | trial_division 2 nth_triangular > 100 = nth_triangular | otherwise = find_triangular (n + 1) where nth_triangular = (n * (n + 1)) `div` 2 trial_division :: Int -> Int -> Int trial_division by x | x == 0 || by > x = 2 | x `mod` by == 0 = 1 + trial_division by (x `div` by) | otherwise = trial_division (by + 1) x -- naive -- triangulars :: Int -> [Int] -- triangulars 0 = [] -- triangulars i = sum [1..i] : triangulars (i - 1)