python – 所有因子产品的枚举小于最大值

我想列举一些整数因子的所有可能产品,只有一些最大值:

> P((2,3,11),10)将返回(2,3,4,6,8,9).
> P((5,7,13),30)将返回(5,7,13,25).

这似乎是树遍历,一旦达到最大值,树枝就会停止生长,但我不知道树枝数量的界限是什么.这个问题推荐使用什么算法或习惯用法?到目前为止我最接近的是itertools.product(),它似乎为每个输出集设置了固定数量的术语(例如2).

对于上下文,我试图检查与n互质的数字.在这种情况下,n本身是上限,因子列表是n的因子.我试着将这个问题概括一点.

解决方法:

我喜欢这种方法,它涉及将1乘以输入列表中的所有元素,然后将所有结果乘以输入列表中的元素等,直到达到限制.

def signature_seq(signature, limit):
  products = set((1,))
  for factor in signature:
    new_products = set()
    for prod in products:
      x = factor * prod
      while x <= limit:
        new_products.add(x)
        x *= factor
    products.update(new_products)

  products.remove(1)
  return products

这应该做你想要的:

>>> print(sorted(signature_seq((2, 3, 11), 10)))
[2, 3, 4, 6, 8, 9]
>>> print(sorted(signature_seq((5, 7, 13), 30)))
[5, 7, 13, 25]

顺便说一句,如果给出一个以2开头的连续素数列表,这是一个smooth number生成器.

上一篇:算法-java实现


下一篇:G - Non-Prime Factors Kattis - nonprimefactors (筛1-n内的当前数中非素数的个数)