In [1]:
import numpy as np
import time
start = time.time()
primes = [2,3,5,7,11,13,17,19,23] # We only need the first 9 primes
max_N = np.prod(primes) #max_N*(max_N+1)/2 is a triangle number with > 500 divisors
def get_primes(N):
# Inefficient, but sufficient
prime_list = []
p_count = 0
while N>1 and p_count<len(primes):
p = primes[p_count]
if N%p == 0:
prime_list.append(p)
N = N/p
else:
p_count+=1
return prime_list
def count(x):
return np.unique(x, return_counts=True)[1]
for N in xrange(1,max_N):
prime_divs = get_primes(N) + get_primes(N+1)
prime_divs.remove(2)
total_divisors = np.prod(1+count(prime_divs))
if total_divisors > 500:
print "Answer:" + str(N*(N+1)/2)
break
print "Elapsed time:{0} seconds".format(time.time()-start)
In [1]:
In [1]:
In [ ]: