我试图通过以下代码找到数字的素因数:
def pf(n):
f=[]
while n != 1:
for i in range(2, n+1):
if n%i == 0:
f.append(i)
n //=i
return f
pf(8)的输出是[2,4],而不是我期望的[2,2,2]。 pf(16)的输出为[2,4,2],而不是[2,2,2,2]。 谁能帮我弄清楚我的代码出了什么问题?
答案 0 :(得分:1)
如果您在循环中中断,将会得到想要的:
def pf(n):
f=[]
while n != 1:
for i in range(2, n+1):
if n%i == 0:
f.append(i)
n //=i
break
return f
在您的第一个循环中,8
可除以2
,因此n等于4
。然后当我等于4
时,便将4作为素数因子
我更喜欢这种实现方式:)
def pf(n):
f=[]
i = 2
while n != 1:
if n%i == 0:
f.append(i)
n //=i
else:
i += 1
return f
此实现避免了您重新计算无法划分的已知范围内的数字。