python使用列表实现筛选法求素数经典代码,对为什么要用平方根的理解

maxNumber = int(input('请输入一个大于2的自然数:'))
lst = list(range(2, maxNumber))
m = int(maxNumber ** 0.5)
for index, value in enumerate(lst):
    if value > m:
        break
    lst[index + 1:] = filter(lambda x: x % value != 0, lst[index + 1:])

print(lst)

例如[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]

m=16^0.5=4

为什么要用平方根呢,为什么遍历到5(>4)就停下来

#因为第1到第2轮,遍历2,3,4的倍数,能被2,3,4整除的数都被过滤了,

当然也过滤了2X5=10,3X5=15,4X5=20(已然大于最大整数),也就是5的倍数已然都被过滤了

所以再遍历5的倍数进行过滤没有必要,同理,6、7、8、9、10。。。。的倍数都被过滤了

所以当最大整数很大的时候,代码执行的效率被大大提升了,而不是傻傻的逐个遍历,做无用功。

思考码字不易,给个赞呗~~

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值