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