def slow(): """ Use a generating function to retrieve partition of size k and determine the smallest integer that satisfy sum(ak) = prod(ak) EDIT: works but two slow (exponential time to compute the partitions) """ import IntegerPartitions prod = lambda iterable: reduce(lambda x,y: x*y, iterable, 1) s = set() i = 2 for k in range(2,N+1): #i = k while True: for p in IntegerPartitions.mckay(i): if len(p) != k: continue if prod(p) == i: break if prod(p) == i: break i += 1 print "found", i, k s.add(i) return sum(s)
def fixed_length_partitions(i,k): return IntegerPartitions.fixed_length_partitions(i,k)