7

例如,数字 24 的素数分解为 2^3*3^1,可以写成以下方式

1*24
2*12
2*2*6
2*3*4
2*2*2*3
3*8
4*6

我可能错过了一个,但你明白了。

我尝试查看另一个线程如何找到任何整数的乘法分区?但老实说,无法理解答案。

我不需要任何人为我编写代码,而是我可以真正使用一些帮助来为此创建一个有效的算法(可能是递归的?)。

我正在用 Python 编码。

4

1 回答 1

5

您的问题可以浓缩为查找set 的所有分区,因为每个因素(素数和复合)都可以表示为构成您的分区的子集元素的乘积。

我会将您的号码的因素表示为一个列表[2, 2, 2, 3](嗯,一组)。以下是此列表的一些可能分区:

  • [2] + [2, 2, 3]
  • [2, 2] + [2, 3]
  • [2] + [2] + [2, 3]
  • [3] + [2] + [2, 2]
  • ...

如果将每个子集的每个元素相乘,您将得到原始数字的一个因子:

  • 2 * 12
  • 4 * 6
  • 2 * 2 * 6
  • 3 * 2 * 4

您可能需要为1 * n.

这是一个相关的问题:如何最大限度地划分集合?

还有另一个相关链接:Generating the Partitions of a Set

于 2012-11-15T02:24:53.663 回答