正整数的集合是正整数d_1 d_2 ... d_k
的因式分解,n
如果
d_1 * d_2 * ... * d_k = n
每个正整数都有一个唯一的素因式分解,但通常它们也具有其中某些项是复合的分解。例如
12 = 6 * 2 = 4 * 3 = 3 * 2 * 2
编写一个程序,函数,动词或类似物,将单个正整数作为输入并返回或打印其不同因式分解的完整列表。分解可以以任何顺序生成,并且它们的项可以以任何顺序生成,但是彼此之间不应有两个置换。1
除两个例外,分解可能不包括:对于输入,n
您可以给出分解n*1
而不是n
; 对于输入,1
您可以给出因式分解1
而不是空白列表。
您可以假定输入将在带符号的32位整数范围内。如果输出为字符串,则分解中的数字定界与分解中的定界之间应该有明显的区别,但是(例如)没有必要将因子与连在一起*
。
您的代码应能够在合理的台式机上在10分钟内处理任何有效输入。
例子
1 [[]]
or [[1]]
or [[1 1]]
7 [[7]]
or [[7 1]]
or [[1 7]]
12 [[12] [6 2] [4 3] [2 3 2]]
or variants
16 [[2 2 2 2] [2 2 4] [2 8] [4 4] [16]]
or variants
901800900 a list of 198091 factorisations
1338557220 a list of 246218 factorisations
901800900
和1338557220
我们可以检查的地方张贴因式分解的清单吗?我的代码分别为这些数字提供了2048和1024的因式分解,但我不确定为什么。