我试图编写函数来查找给定数字的素数因子分解。它不需要快速或高效,只需要工作。
这是我的想法:
这是我的代码:
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}
。有人可以尝试发现我的错误吗?
答案 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}