首先是来自百度百科中质数的定义:
质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数(规定1既不是质数也不是合数)。
那么怎么使用程序去判断一个数,是否是质数。
初始版本:
最原始的判断方法就是用for循环遍历每一个数,这种方法固然可行,但是如果用来A题,恐怕解题速度不太理想。
升级版本:
细想一下,1*3
和3*1
是不是一回事,所以我们循环判断这个数是不是质数的时候,只需要循环到这个数的开方即可
import math
math.sqrt(n)
最终版本:
再观察一下,除了2
和3
,所有的质数都在6的倍数附近,要么是6-1,要么是6+1;
6n+(0)
:一定可以被3
整除
6n+2
:一定可以被2
整除
6n+3
:一定可以被3
整除
6n+4
:一定可以被2
整除
只有6n+1
和6n+5
(即6n-1
)是不确定的。
所以在执行循环之前,可以先判断一下这个数是否是6n+1或者6n-1;即(n+1)%6和(n-1)%6是否等于0。
最终代码如下:
def isPrime(n):
if n <= 3:
return n >= 2
else:
if (n + 1) % 6 != 0 and (n - 1) % 6 != 0:
return False
for i in range(2, int(math.sqrt(n)) + 1): # math.sqrt返回值是浮点型,所以要加一个int()
if n % i == 0:
return False
return True
如果大佬有更好的想法或者思路,欢迎补充!