#!/usr/bin/env python

# 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?

import os, sys
dirname, filename = os.path.split(os.path.abspath(sys.argv[0]))
util_dir = dirname+"/../util/"
sys.path.append(util_dir)

from util import factor
from operator import mul

def getTri(n):
    tri=0
    if n>0:
        while n>0:
            tri=tri+n
            n=n-1
    return tri

def numfactors_alt(n):
    return 0 if n<1 else 1 if n<2 else reduce(mul,[b+1 for (a,b) in factor(n)])

def numfactors(n):
    return len(set(reduce(list.__add__,([i,n/i] for i in range(1,int(n**0.5)+1)if n%i==0))))

def unfactor(factorization):
    return reduce(mul,[a**b for (a,b) in factorization])

def main():
    i=fs=0
    while (fs<=500):
        i=i+1
        tri = getTri(i)
        fs = numfactors(tri)

    print tri

if __name__ == "__main__":
    main()