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?

#!/usr/bin/ruby
# Get a triangle number: n * ( n + 1 ) / 2
def getTriangleNumberValue(n)
	return n * ( n + 1 ) /  2
end
# Brute force
# (There is a better way to do it using Prime Factorisation)
def getNumberDivisor(n)
	divisors = 0
	sqrt = Math.sqrt(n)
	
	for i in 1...sqrt
		if n % i == 0
			divisors += 2
		end
	end
	
	# Correction if the number is a perfect square
	if sqrt * sqrt == n
		divisors -= 1
	end
	return divisors	
end
notFound = true
i = 1
while notFound
	triangleNumberValue = getTriangleNumberValue(i)
	
	if getNumberDivisor(triangleNumberValue) > 500
		notFound = false
	end
	i += 1
end
puts triangleNumberValue