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