In my attempt to learn (Iron)Python out in the open, here’s my solution for Project Euler Problem 12.
As always, any feedback is welcome.
# Euler 12
# http://projecteuler.net/index.php?section=problems&id=12
# 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 time
start = time.time()
from math import sqrt
def divisor_count(x):
count = 2 # itself and 1
for i in xrange(2, int(sqrt(x)) + 1):
if ((x % i) == 0):
if (i != sqrt(x)): count += 2
else: count += 1
return count
def triangle_generator():
i = 1
while True:
yield int(0.5 * i * (i + 1))
i += 1
triangles = triangle_generator()
answer = 0
while True:
num = triangles.next()
if (divisor_count(num) >= 501):
answer = num
break;
print answer
print "Elapsed Time:", (time.time() - start) * 1000, "millisecs"
a=raw_input('Press return to continue')