Project Euler 12: (Iron)Python

Posted by Ben Griswold on Johnny Coder See other posts from Johnny Coder or by Ben Griswold
Published on Wed, 22 Sep 2010 20:19:18 +0000 Indexed on 2010/12/06 16:59 UTC
Read the original article Hit count: 408

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')

© Johnny Coder or respective owner

Related posts about ironpython

Related posts about languages