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)


Answer:76576500
Elapsed time:0.5369181633 seconds

In [1]:


In [1]:


In [ ]: