My solutions to the problems found at Project Euler.

Jump to: | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 16 | 17 | 20 | 21 | 22 | 25 | 3-2 |

Problem 12


#! /usr/bin/python
# Problem: Find the first sequence in the sequence of triangle numbers where
#          our number of divisors was > 500.
#
# Solution: Implement a simple-but-effective divisor test.
#
# Notes: I had a function that did this that I called find_whole_factors in previous
#        solutions, but HOLY CRAP it was bad. This is a marked improvement. After some
#        research online and finding out that not only is testing every possible divisor
#        1-n is bad, it's really bad! A little bit of learning goes a long way.
import math

def divisors(n):
  """ Return a list of divisors for n. """
  sqrtn = int(math.sqrt(n))
  divisors = []
  
  if sqrtn ** 2 == n:
    divisors.append(sqrtn)
    
  for number in xrange(1,sqrtn):
    if n % number == 0:
      divisors.append(number)
      divisors.append(n/number)
  
  return divisors
  
if __name__ == "__main__":
  running = True
  counter = 1
  highest = 0
  seqsum = 0
 
  while running:
    seqsum += counter
    
    factors = divisors(seqsum)
    if len(factors) > highest:
      highest = len(factors)
      print highest
    
    if len(factors) > 500:
      running = False
      print counter, seqsum
    else:
      counter += 1

jb