如何在Python中修复'找到数字的主要因素'

时间:2019-08-12 14:52:29

标签: python-3.x

我试图通过以下代码找到数字的素因数:

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]。 谁能帮我弄清楚我的代码出了什么问题?

1 个答案:

答案 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

此实现避免了您重新计算无法划分的已知范围内的数字。