from eulerhelper import prime_factors, prime_sieve from operator import mul sieve_max = 10**6 sieve = prime_sieve(sieve_max) primes = [] for x in xrange(sieve_max): if sieve[x]: primes.append(x) def factors(n): facs = [] for p in primes: if n == 1: break if n%p == 0: facs.append(p) while n%p == 0: n = n / p return facs def problem47(): i = 0 size = 4 numbers = [] while True: i = i + 1 print i numbers.append(len(factors(i))) if len(numbers) > size: del numbers[0]
from eulerhelper import prime_sieve limit = 10**6 sieve = prime_sieve(limit) primes = [x for x in xrange(limit) if sieve[x]] def count_additions(n, p): count = 0 while n > 0: count = count + 1 n = n - primes[p] p = p + 1 return count, n def problem50(): result = 0 max = 0 for n in xrange(limit): print n if sieve[n] == 1: stop = 10 for p in xrange(0, stop): additions, diff = count_additions(n, p) if diff == 0 and additions > max: max = additions result = n return result print problem50()