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

size = 100

is_prime = [True for i in range(size)]

for i in range(2, size):
	if is_prime[i]:
		j = 2
		while i * j < size:
			is_prime[i * j] = False
			j += 1

primes = filter(lambda x: is_prime[x], range(3, size))

def count_factors(num):
	ret = 1
	if num % 2 == 0:
		count = 0
		while num % 2 == 0:
			count += 1
			num /= 2
		ret *= count
	for x in primes:
		count = 1
		while num % x == 0:
			count += 1
			num /= x
		ret *= count
		if num == 1:
			return ret
	return ret

for i in range(2, 20000):
	if count_factors(i - 1) * count_factors(i) > 500:
		print (i - 1) * i / 2
		break
# 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?

size = 100

is_prime = [True for i in range(size)]

for i in range(2, size):
	if is_prime[i]:
		j = 2
		while i * j < size:
			is_prime[i * j] = False
			j += 1

primes = filter(lambda x: is_prime[x], range(3, size))

def count_factors(num):
	ret = 1
	if num % 2 == 0:
		count = 0
		while num % 2 == 0:
			count += 1
			num /= 2
		ret *= count
	for x in primes:
		count = 1
		while num % x == 0:
			count += 1
			num /= x
		ret *= count
		if num == 1:
			return ret
	return ret

for i in range(2, 20000):
	if count_factors(i - 1) * count_factors(i) > 500:
		print (i - 1) * i / 2
		break
# 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?