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。。。。的倍数都被过滤了
所以当最大整数很大的时候,代码执行的效率被大大提升了,而不是傻傻的逐个遍历,做无用功。