นี่คือวิธีแก้ไขตามความคิดเห็นของฉันด้านบน ฉันไม่ได้อ้างสิทธิ์นี้เป็นสิ่งที่ดีที่สุด
ความคิดคือการพิจารณา T( n , m )ซึ่งเรานิยามว่า "จำนวนเต็มบวกที่เล็กที่สุดด้วย n ตัวหารและ ม. ปัจจัยสำคัญเฉพาะ "เราทำการสังเกตได้ง่าย:
T( n , 1 )T(2ม., m )=2n - 1=พี1พี2⋯พีม.
และเราก็มีการเกิดขึ้นอีก:
T( n , m ) =นาทีd| n[ T(nd, m - 1 ) ⋅พีd- 1ม.]
ในที่สุดปริมาณที่คุณต้องการคือ
นาที1 ≤ ฉัน≤ ⌈ บันทึก( n ) ⌉T( n , ฉัน)
ในตอนท้ายนี่คือรหัส Python บางส่วนที่เห็นด้วยกับตัวเลขทั้งหมดที่คุณให้ไว้ด้านบน round(2**smallest(n))โปรดทราบว่าจะทำงานร่วมกับลอการิทึมเพื่อให้ตัวเลขที่มีขนาดเล็กลงเพื่อให้จำนวนเต็มจริงที่คุณแสวงหาก็คือ
import functools
import itertools
import math
# All primes less than 100.
PRIMES = [
  2, 3, 5, 7, 11,
  13, 17, 19, 23, 29,
  31, 37, 41, 43, 47,
  53, 59, 61, 67, 71,
  73, 79, 83, 89, 97,
]
LOG_PRIMES = [math.log2(p) for p in PRIMES]
def smallest(n):
  max_factors = math.ceil(math.log2(n))
  min_so_far = float('Infinity')
  factors = factorize(n)
  memo = {}
  for i in range(1, max_factors+1):
    t = T(n,i, factors, memo)
    if 0.0 < t < min_so_far:
      min_so_far = t
  return min_so_far
def T(n, m, factors=None, memo=None):
  if memo is None:
    memo = {}
  if n < 2 or m < 1:
    return 0
  elif m == 1:
    # Everything on the smallest prime.
    return (n-1) * LOG_PRIMES[0]
  elif n < 2**m:
    return 0
  elif n == 2**m:
    # Product of first m primes, in log.
    return sum(LOG_PRIMES[:m])
  elif (n,m) in memo:
    return memo[(n,m)]
  if factors is None:
    factors = factorize(n)
  if len(factors) < m:
    return 0
  smallest = float('Infinity')  
  for factor_list in powerset(factors):
    divisor = product(factor_list)
    first = T(divisor, m-1, factor_list, memo)
    # No such product.
    if first < 1.0:
      continue
    second = (n/divisor - 1) * LOG_PRIMES[m-1]
    total = first + second
    if total < smallest:
      smallest = total
  memo[(n,m)] = smallest
  return smallest
def product(nums):
  return functools.reduce(lambda x,y: x*y, nums, 1)
def factorize(n):
  prime_factors = []
  for p in PRIMES:
    while n%p == 0:
      n //= p
      prime_factors.append(p)
    if n == 1:
      break
  return prime_factors
def powerset(lst):
  # No empty set.
  return itertools.chain.from_iterable(itertools.combinations(lst, r) 
                                       for r in range(1, len(lst)+1))