我试图找到Python中提供的数字的所有可能的因式分解。
例如:1)给定 n = 12 , 输出将是, f(n)= [[2,2,3],[4,3],[6,2],[12]]
2)给出 n = 24 , 输出将是, f(n)= [2,2,2,3],[2,2,6],[2,12],[4,6],[8,3],[ 24]
这是我的代码:
def p(a):
k=1
m=1
n=[]
for i in range (len(a)):
for j in range(0,i+1):
k*=a[j]
for l in range(i+1,len(a)):
m*=a[l]
n+=[[k,m],]
k=1
m=1
return n
def f(n):
primfac = []
d = 2
while d*d <= n:
while (n % d) == 0:
primfac.append(d)
n //= d
d += 1
if n > 1:
primfac.append(n)
return p(primfac)
但我的代码返回以下值:
1)对于 n = 12 ,输出为,
[[2, 10], [4, 5], [20, 1]]
2)1)对于 n = 24 ,输出为,
[[2, 12], [4, 6], [8, 3], [24, 1]]
我可以做些什么来获得相关结果?
答案 0 :(得分:0)
我不了解python,因此无法帮助您处理代码,但here在我提供的相关问题的解释中(如果你有一些Java代码)可以阅读Java)。
用多重性来计算你的数字 - 这很可能是最昂贵的步骤O(sqrt(N)) - 你可以在这里停下来,如果这是你想要的那个
建立{1,p i 1 ,p i 1 的集合。 ..,p i m i } - p i 是多重m 的素因子我
在这些套装之间执行笛卡尔积,你将得到你所有数的除数 - 你将在这里花费更长的时间只用于具有许多不同因素(和多重性)的数字 - 例如2 10 x 3 8 x 5 4 x 7 3 将具有1980除数。
现在,由上述结果产生的每个除数d
都会附带它(N/d
),所以如果你想要不同的顺序,你需要进行明确的因子分解,那么你就是&#39;&#39 ;我需要对它们进行排序并消除重复。