【发布时间】:2021-08-20 19:51:54
【问题描述】:
我在一个检查素数的网站上找到了这个代码
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???
【问题讨论】:
-
简短回答,因为 while 循环将
i递增6。 -
我们检查 5,7 然后 11,13,然后 17,19,然后 23,25(不检查 25,因为已经检查 5)然后 29,31 等等
-
这是对素数的朴素算法的加速,基于如果 p 是素数,则 p % 6 必须是 1 或 5,因此只需要检查每 6 个数字中的 2 个.
-
非常感谢你,兄弟,你得到了我并给了我一个简单的解释。
标签: python python-3.x primes