Skip to main content
 首页 » 编程设计

python之质数查找器

2025年05月04日10zdz8207

所以我正在尝试制作一个素数查找器,为了节省计算时间,我希望它在找到一个不是 1 或数字本身的除数后中止 forloop。现在函数可以工作了,但是它完全忽略了我的 if 语句。我做错了什么?

def prime(number): 
    oldnum = number 
    factor = 1 
    while number > 1: 
        factor += 1 
        while number % factor == 0: 
            if 1< factor < oldnum: 
                return 0 # is not prime 
                print("yay") 
                break 
            number //= factor 
    return 1 #prime! 

请您参考如下方法:

您的代码永远不会到达 return 1 行(顺便说一下,它应该是 return True)因为

  • 您的break 语句只会跳出内部while 循环
  • break 语句从未到达,因为您在此之前返回 0。

无论如何,您的内部 while 循环应该是一个 if(因为您实际上并没有做任何需要循环的事情)。

如果你改变它(并删除无法访问的代码),它“工作”(除了 prime(1) 的错误结果是 True),这是一个非常查找素数的低效方法。

def prime(number): 
    oldnum = number 
    factor = 1 
    while number > 1: 
        factor += 1 
        if number % factor == 0: 
            if 1 < factor < oldnum: 
                return False # is not prime 
            number //= factor 
    return True # is prime!