素数因子分解算法

时间:2014-12-23 22:23:40

标签: python

我试图编写函数来查找给定数字的素数因子分解。它不需要快速或高效,只需要工作。

这是我的想法:

  • 选择一个数字和一个起点(将是2)。
  • 如果数字可以被2整除,请将一个数字加到计数器上并将数字除以2.
  • 当数字不能被2整除时,请将起点更改为3.
  • 重复。

这是我的代码:

def ffs(num):

factors={}

n=2

while n<num:

    while num%n==0:

        num=num/n

        if n in factors:
            factors[n]+=1
        else:
            factors[n]=1


    n+=1

return factors

我很早就遇到了一些问题。当我尝试评估ffs(6)时,我应该{2: 1, 3:1},而是获得{2: 1}。有人可以尝试发现我的错误吗?

1 个答案:

答案 0 :(得分:4)

所以,你的算法似乎很好,除非你没有正确地谈论你的终止条件。实际应该是num == 1时。因此...

def ffs(num):
    factors = {}
    n = 2

    while num != 1:
        while num % n == 0:
            num /= n
            if n in factors:
                factors[n] += 1
            else:
                factors[n] = 1
        n += 1

    return factors

print ffs(6)

我们也可以使用collections.defaultdict来简化代码:

from collections import defaultdict

def ffs(num):
    factors = defaultdict(lambda: 0)
    n = 2

    while num != 1:
        while num % n == 0:
            factors[n] += 1
            num /= n
        n += 1

    return dict(factors)

print ffs(6)

这两个都会输出:

{2: 1, 3: 1}