Skip to main content
 首页 » 编程设计

python之初级素数分解

2025年05月04日60Leo_wl

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

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) 

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

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' 

有些输入有效,有些无效。我不知道为什么。我也不知道如何解决这个错误。请帮忙。谢谢。

请您参考如下方法:

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

    n = int(n**0.5)+1 
    for i in range(2,n): 
        if n % i == 0: 

您可能会考虑使用更具描述性的名称,例如 factor_limit。