所有可能的数字因素排列列表

时间:2016-11-19 13:48:22

标签: algorithm python-2.7

我试图找到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]]

我可以做些什么来获得相关结果?

1 个答案:

答案 0 :(得分:0)

我不了解python,因此无法帮助您处理代码,但here在我提供的相关问题的解释中(如果你有一些Java代码)可以阅读Java)。

  1. 用多重性来计算你的数字 - 这很可能是最昂贵的步骤O(sqrt(N)) - 你可以在这里停下来,如果这是你想要的那个

  2. 建立{1,p i 1 ,p i 1 的集合。 ..,p i m i } - p i 是多重m 的素因子我

  3. 在这些套装之间执行笛卡尔积,你将得到你所有数的除数 - 你将在这里花费更长的时间只用于具有许多不同因素(和多重性)的数字 - 例如2 10 x 3 8 x 5 4 x 7 3 将具有1980除数。

  4. 现在,由上述结果产生的每个除数d都会附带它(N/d),所以如果你想要不同的顺序,你需要进行明确的因子分解,那么你就是&#39;&#39 ;我需要对它们进行排序并消除重复。