In [1]:
"""
Problem 12
==========
The sequence of triangle numbers is generated by adding the natural
numbers. So the 7^th 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?
"""
# Sum over i
def factors(n):
"""Returns all factors of n. (c) agf, steveha and Steinar Lima from SO."""
step = 2 if n%2 else 1
return set(x for tup in ([i, n//i]
for i in range(1, int(n**0.5)+1, step) if n % i == 0) for x in tup)
def triNum(numDiv):
"""Returns the first triangle number to have over numDiv divisors."""
# do factorint, get number of divisors; repeat ++1 until numOfDivs == 500
i = 0
tNum = 0
while(True):
i = i + 1
tNum = tNum + i
# print(factors(tNum))
if(len(factors(tNum)) >= numDiv):
return tNum
In [3]:
triNum(500)
Out[3]: