【问题标题】:List of all possible permutations of factors of a number一个数的因子的所有可能排列的列表
【发布时间】:2016-11-19 13:48:21
【问题描述】:

我正在尝试查找 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]]

我该怎么做才能获得相关结果?

【问题讨论】:

    标签: algorithm python-2.7


    【解决方案1】:

    我不知道 python,所以无法帮助你编写代码,但here 在我为相关问题提供的解释中(如果你能阅读 Java,还有一些 Java 代码)。

    1. 将您的数字与多重性相结合 - 这很可能是最昂贵的步骤 O(sqrt(N)) - 如果这是您想要的,您可以在这里停下来

    2. 为您构建 {1, pi1, pi1, . .., pimi} - pi 是具有 m 多重性的素因子我

    3. 在这些集合之间执行笛卡尔积,你会得到你的数字的所有除数 - 你会在这里花更长的时间只处理具有许多不同因子(和多重性)的数字 - 例如 210 x 3 8 x 54 x 73 将有 1980 个除数。

    现在,由上述结果产生的每个除数 d 都将附带它的对 (N/d),因此如果您想要不同的因式分解而不管顺序如何,您需要对它们进行排序并消除重复项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-20
      • 2017-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多