用python求一个数的最大素因子 def prime(x): 对于范围(2,x)内的a: 如果x%a==0: 打破 其他: 返回x num=0 最大值=0 对于范围内的i(2600851475143): 如果600851475143%i==0: num=素数(i) 如果最大值=0

用python求一个数的最大素因子 def prime(x): 对于范围(2,x)内的a: 如果x%a==0: 打破 其他: 返回x num=0 最大值=0 对于范围内的i(2600851475143): 如果600851475143%i==0: num=素数(i) 如果最大值=0,python,typeerror,Python,Typeerror,我得到了答案,但它没有成功运行我得到了以下错误: ”当使用非素数调用prime时,它从不执行return语句,因此返回None如果prime在中断时停止,它将返回None 可以使用return 0代替break。这不会遇到相同的错误,也不会更改最大值,因为最大值>=0 但我想这是一个非常低效的方法来获得最大的素数因子。分解因子然后寻找最大因子可能会更快。def prime(x)调用break当如果x%a==0:为真,但不能返回任何内容 要解决此问题,请使用: def prime(x):

我得到了答案,但它没有成功运行我得到了以下错误:
”当使用非素数调用
prime
时,它从不执行
return
语句,因此返回
None

如果prime在中断时停止,它将返回None

可以使用return 0代替break。这不会遇到相同的错误,也不会更改最大值,因为最大值>=0

但我想这是一个非常低效的方法来获得最大的素数因子。分解因子然后寻找最大因子可能会更快。

def prime(x)调用
break
如果x%a==0:
为真,但不能返回任何内容

要解决此问题,请使用:

def prime(x):
    for a in range(2, x):
        if x%a == 0:
            break
    else:
        return x
num = 0 
largest = 0
for i in range(2, 600851475143):
    if 600851475143%i == 0:
        num = prime(i)
    
    if largest < num:
        largest = num
print(largest)

顺便说一句:查找Primefactors与其说是一个交互问题,不如说是一个递归问题。

感谢@ScottHunter的澄清,我删除了我的评论,因为它没有任何帮助。是的,我尝试在0失效之前返回0。谢谢
def prime(x):
    for a in range(2, x):
        if x%a == 0:
            break
    return x