如何解决在 python 中检查质数逻辑混乱
我在一个用于检查素数的网站上找到了这段代码
def isPrime(number):
if (number <= 1):
return False
elif (number <= 3):
return True
elif (number % 2 == 0 or number % 3 == 0):
return False
i = 5
while(i * i <= number):
if (number % i == 0 or number % (i + 2) == 0):
return False
i += 6
return True
但我无法理解while循环下的if
语句的逻辑,即if (number % i == 0 or number % (i + 2) == 0)
为什么需要i+2
???当 i
是偶数时,i+2
也是偶数和奇数,而 i
是奇数。那么,为什么需要检查 i+2
???
解决方法
i 从 5 开始,所以加 2 意味着只计算偶数。 它使检查更快。
,除了 2 和 3,所有素数都是 6n±1 的形式。此代码显式检查 2 和 3,然后成对检查更高的数字:6n-1、6n+1,从 5 开始。因此它检查 5、7、11、13、17、19 等等。它在对之间的第 6 步和每对中的第 2 步。这样做可以避免检查 2 或 3 的倍数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。