1. from collections import defaultdict
  2. from math import factorial,floor, sqrt, log, e
  3. from operator import mul
  4.  
  5. def factor(n):
  6. p=defaultdict(int)
  7. r = n
  8. while r > 1:
  9. if not r % 2:
  10. c=2
  11. else:
  12. c=3
  13. while r % c > 0:
  14. c+=2
  15. p[c]+=1
  16. r /= c
  17. return [k**v for k,v in p.iteritems()]
  18.  
  19. def biggest_n(n):
  20. return max([(n, sum(factor )) for n in xrange(lower , upper ) if sum(factor ) <= i])[0]
  21.  
  22.  
  23. primes = (lambda b: [x for x in range(2,b) if not [t for t in range(2,x) if not x%t]])
  24.  
  25. upper = (lambda i: e**(1.06*sqrt(i*log(i,e))))
  26.  
  27. def lower(n):
  28. p=primes
  29. x=[1]
  30. while sum <=i:
  31. if not p:
  32. x.append
  33. break
  34. x.append(p.pop )
  35. return reduce(mul, x[:-1])
  36.  
  37. print biggest_n(10)
  38.  
  39. raw_input('/end')