所以我正在尝试制作一个素数查找器,为了节省计算时间,我希望它在找到一个不是 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!
关于python - 质数查找器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15494239/