def euler012(n): ''' Highly divisible triangular number 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? >>> euler012(5) 28 >>> euler012(500) 76576500 ''' return dropwhile(lambda x: len(list(divisors(x))) <= n, gentriangle()).next()
def euler012b(n): ''' Original version of above function. >>> euler012b(5) 28 >>> euler012b(500) 76576500 ''' t = gentriangle() while True: triangle = t.next() if len(list(divisors(triangle))) > n: return triangle
def euler005(n): ''' Smallest multiple 2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without any remainder. What is the smallest positive number that is evenly divisible by all of the numbers from 1 to 20? >>> euler005(10) 2520 >>> euler005(20) 232792560 ''' start = 1 multiply = range(2, n+1) # steps through each integer in the range. for i in multiply: if start % i != 0: try: start = start * list(divisors(i))[1] # multiplies by the smallest factor except IndexError: start = start * i # if is prime, multiply by that number return start
def ami(n): return sum(divisors(n, inclusive=False))