# Project Euler #012

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?

``````let rec triangle_number order =
if order = 0 then order else order + triangle_number (order - 1)

let rec get_divisors n (i:int) (divisors:list<int>) =
if i < (n / 2) then
if (n % i) = 0 then
get_divisors n (i + 1) (i :: divisors)
else
get_divisors n (i + 1) divisors
else
divisors

let rec find_triangle_number order number_of_divisors =
let divisors = (get_divisors (triangle_number order) 1 []).Length
if divisors > number_of_divisors then
order
else
find_triangle_number (order + 1) number_of_divisors

// This is an expensive operation
(find_triangle_number 1 500) |> triangle_number
``````