#The maximum number of prime factors is the largest k such that the product of the first k primes is < 10^n lim = 5000 #get primes sieve = [i for i in range(3,lim,2)] primes = [2] while sieve: ..p = sieve.pop(0) ..if p*p > lim: ....primes.extend([p] + sieve) ....break ..primes.append(p) ..sieve = [i for i in sieve if i%p] for n in range(1,41): ..primorial = 1 #how many prime factors do we need? ..leng = 0 ..for p in primes: ....if primorial * p > 10**n: break ....primorial *= p ....leng += 1 ..#obtain upper bound for prime factors ..upper = (primes[leng-1] * 10**n) // primorial ..if upper >= lim: ....print("Increase lim to >", upper) ....break ..prim = [p for p in primes if p <= upper] ..nums = [1] ..for k in range(leng): ....nex = set([]) ....for p in prim: ......for m in nums: ........if m*p**(leng-k) >= 10**n: break ........if not m%p: continue ........nex.add(m*p) ....nums = sorted(list(nex)) ..print(n,nums[-1])