初学者素数因子分解

con*_*nks 1 python primes factors

我写了一个初学者程序,旨在查找和打印任何数字的素数因子:

def is_prime(n):
    if n == 3:
        return True
    elif n == 4:
        return False
    else:
        n = int(n**0.5)+1
        for i in range(2,n):
            if n % i == 0:
                return False
        return True

def prime_factors(n):
    for i in range(2,n):
        if n % i == 0:
            x = i
            primes.append(x)
            y = n / x
            return y
            break


primes = []

def main(y):
    while not is_prime(y):
        y = prime_factors(y)
    primes.append(y)
    print(primes)
Run Code Online (Sandbox Code Playgroud)

以下是该程序的运行示例,让我感到困惑:

main(625)

[5, 5, 5, 5]

...

main(160)

[160]

...

main(6)

[6]

...

main(1007)

TypeError: unsupported operand type(s) for ** or pow(): 'NoneType' and 'float'
Run Code Online (Sandbox Code Playgroud)

有些投入有效,有些则没有.我无法弄清楚为什么.我也无法弄清楚如何解决这个错误.请帮忙.谢谢.

Gre*_*ill 5

您的is_prime函数似乎错误地重用了n这些行中的变量:

    n = int(n**0.5)+1
    for i in range(2,n):
        if n % i == 0:
Run Code Online (Sandbox Code Playgroud)

您可以考虑使用更具描述性的名称,factor_limit例如.

  • 尊重所有人,为什么甚至懒得检查除数是否是素数?检查数字是否为素数需要花费时间和大量迭代,将所有数字<n一次又一次地除去可能会更快.不要说"哦,你会发现无用的非素数除数",因为如果你按顺序进行,你会发现2在4之前嘿嘿 (2认同)