python中判断素数的函数
来看这一种判断素数(质数)的函数:
form math import sqrt
def is_prime(n):
if n==1:
return False
for i in range(2, int(sqrt(n) + 1)):
if n % i == 0:
return False
return True
看起来,这是一种比较优秀的方法了,因为通过sqrt()函数减少了开方级的计算量。
再来看:
def is_prime(number):
if number > 1:
if number == 2:
return True
if number % 2 == 0:
return False
for current in range(3, int(math.sqrt(number) + 1), 2):
if number % current == 0:
return False
return True
return False
咋一看,这一次的代码看起来更多。但是,计算量却又在原来的基础上又几乎减少一半。高明之处就在这一句:if number % 2 == 0:
,其实这一句就一步所有偶数因子给排除掉了,所以在这一句range(3, int(math.sqrt(number) + 1), 2)
中,直接从3起步,步长为2.在range()函数产生的序列是[3,5,7,9,...]
,比原来由range(2, int(sqrt(n) + 1))
产生的[2,3,4,5,6,...]
少了偶数的部分。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步