Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何修复';求一个数的素因子';用Python_Python 3.x - Fatal编程技术网

Python 3.x 如何修复';求一个数的素因子';用Python

Python 3.x 如何修复';求一个数的素因子';用Python,python-3.x,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]。 谁能帮我找出

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

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

如果你打破了循环,你会得到你想要的:

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
为什么错了? 在第一个for循环中,
8
is可以被
2
除掉,因此n等于
4
。当i等于
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