#!/usr/bin/python
# -*- coding: utf-8 -*-

import math;
#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?

DIVISORS=500 # greater-than

# get factors of the number as dictionary
def factors(N):
  f = {}
  i = 2
  while N > 1:

    if (N % i) == 0:
      N = N / i
      if f.has_key(i):
        f[i] = f[i] + 1
      else:
        f[i] = 1
    else:
      i = i + 1
  return f


# count number of dividers
# including 1 and self
def countDividers(factors):
  result = 1
  for i in factors.keys():
    if i > 0:
     result = result * (factors[i] + 1)
  return result

def divisors(n):
   f = factors(n)
   print f
   result = countDividers(f)
   return result

def triangle(n):
    return n * (n+1) / 2


for n in xrange(1, 10000000):
  t = triangle(n)
  d = divisors(t)
  print n, t, d
  if (d > DIVISORS):
    exit()
