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]:
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