Problem
https://projecteuler.net/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?
Answer: 76576500
Solution
# /lib/core_extensions/integer/divisors.rb
require 'prime'
# Divisor extension for Integer
module Divisors
def divisor_count
sum = 1
# see https://en.wikipedia.org/wiki/Divisor_function
prime_division.each do |x|
sum *= (x[1] + 1)
end
sum
end
end
# Integer mixin
class Integer
include Divisors
end
#!/usr/bin/env ruby
require 'core_extensions/integer/divisors'
# @see http://en.wikipedia.org/wiki/Triangular_number
def triangle(num)
return 3 if num == 1
((num + 1) * num) / 2
end
def highest_divisible_triangular_number(stop)
i = 1
i += 1 while triangle(i).divisor_count < stop
triangle(i)
end
puts highest_divisible_triangular_number(500) if __FILE__ == $PROGRAM_NAME