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?


In [23]:
def factorize(n):
    i = 1
    while n != 1:
        i += 1
        while n % i ==0:
            n /= i
            yield i

In [56]:
from collections import Counter
def divisor_count(n):
     c = Counter(factorize(n)).values()
     r =1 
     for i in c:
            r *= i +1
     return r

In [57]:
divisor_count(28)


Out[57]:
6

In [58]:
def triangle_numbers():
    at = 1
    s = 0
    while True:
        s += at
        yield s
        at += 1

In [60]:
m = 0
import frogress
widgets = [frogress.BarWidget, frogress.ProgressWidget('count: '), frogress.TimerWidget]
for j  in frogress.bar(triangle_numbers(), widgets=widgets):
    c = divisor_count(j)
    m = max(c, m)
    if c > 500:
        print('\n',j, c)
        break


[........#.] | count: 12324 | Time: 6.9s
 76576500 576