import itertools
import numpy as np
def find_number_of_divisiors(n_vals):
col = np.asmatrix(n_vals, dtype='int32').T
row = np.arange(2, n_vals[-1]/2+1, dtype='int32')
mods = col % row
return 2 + np.sum(mods == 0, axis=1)
def tri_nums():
n = 1
t = 1
while 1:
yield t
n += 1
t += n
t = tri_nums()
print 1, ' has ', 1, ' divisors.'
m = 1
next(t)
chunksize = 500
while True:
nchunk = list(itertools.islice(t, chunksize))
dchunk = find_number_of_divisiors(nchunk)
for i, d in enumerate(dchunk):
if m < d:
print nchunk[i], ' has ', d, ' divisors.'
m = d
if m == 320:
exit(0)
chunksize = 10000000 // nchunk[-1] + 2