I don't know if pratical numbers are interesting but if they are this implementation is a bit slow (a couple of seconds for a list with 100 practical numbers), maybe it can be speeded up a bit.
from itertools import combinations def practical(n): nums = [] def is_practical(k): divs = [i for i in range(1, k) if k % i == 0] sums = set() for i in range(1, len(divs)+1): length_i_combs = combinations(divs, i) for combi in length_i_combs: sums.add(sum(combi)) return all([i in sums for i in nums]) ps = [] m = 1 while len(ps) < n: if is_practical(m): ps.append(m) nums.append(m) m += 1 return psby the way, "is_practical" is taken from stackoverflow..