我一直在尝试编写一个程序来获取一个推算数,并检查它是否是一个素数。如果该数字实际上是质数,那么到目前为止我编写的代码可以完美运行。如果该数字不是素数,它就会表现得很奇怪。我想知道是否有人可以告诉我代码有什么问题。
a=2
num=13
while num > a :
if num%a==0 & a!=num:
print('not prime')
a=a+1
else:
print('prime')
a=(num)+1
估算 24 时给出的结果是:
not prime
not prime
not prime
prime
我将如何修复每个奇数报告素数而不是每个偶数报告素数的错误?
原文由 Chris 发布,翻译遵循 CC BY-SA 4.0 许可协议
一旦知道数字不是质数,就需要停止迭代。添加一个
break
一旦你找到素数退出 while 循环。仅对您的代码进行最少的更改以使其工作:
您的算法等效于:
如果将它放入函数中,则可以免除
break
和 for-else:即使您要像这样对质数进行暴力破解,您也只需要迭代到
n
的平方根。此外,您可以跳过测试两个之后的偶数。有了这些建议:
请注意,此代码无法正确处理
0
、1
和负数。我们通过使用
all
和一个生成器表达式来替换 for 循环来简化这个过程。