用python筛选素数

首先我们要明白什么是素数?

只能被1和自身整除的数

目录

第一种

第二种集合实现筛选素数

第三种


第一种

我认为这是最简单的,规避了a**0.5的思考

a=int(input("请输入一个自然数:"))
lst=[]
for l in range(2,a+1):
   # print(l)#2,3,4,5,6,7,8,9
   # a=int(l**0.5)
   while l<9:
       if l%2==0:
           # print(l, "不是素数")
           break
       else:
           print(l, "是素数")
           lst.append(l)
           break
   while l>=9:
      if l%2==0 or l%3==0 or l%5==0 or l%7==0:
          # print(l,"不是素数")
          break
      else:
          print(l,"是素数")
          lst.append(l)
          break
print(lst)

上面代码思路是9以内的数字只有2为因数,大于等于9的有2 3 5 7 为他们的最小公因素所以之间用or判断,为真即为非素数。

第二种集合实现筛选素数

首先我觉得应该告诉大家什么是筛选法。​​​​​​筛选法_百度百科 (baidu.com)

maxNumber=int(input("请输入一个自然数:"))
numbers=set(range(2,maxNumber))
m=int(maxNumber**0.5)+1
pri=[p for p in range(2,m) if 0 not in [p%d for d in range(2,int(p**0.5)+1)]]
#遍历2——m之间的数字,并对他们进行判断,更加优化代码减少运算时间,提高代码效率。输出2——m之间的素数
# 该表达式的原型是对2——m之间的所有数进行判断,输出2——maxNumber之间的素数
# print(pri)
# print(numbers)
for p in pri:#p=[2,3]
    for i in range(2,maxNumber//p+1):
        numbers.discard(i*p)
print(numbers)
#最后这两个for循环,用来删除利用最小素数删除集合中的元素。

第三种

原理对输入数字之后的数字进行排查,有点和第一种一样。

maxNumber=int(input("请输入一个自然数:"))

numbers=set(range(2,maxNumber))

pri=[p for p in ranger(2,maxNumber) if 0 not in [p%d for d in range(2,int(p**0.5)+1)]]

print(pri)

这串代码的原理是把输入数字后面的数字统装为一个集合,遍历集合中的元素,然后做出判断该元素对2-根号下该元素之间的数字求余数,不为0,则遍历出去。

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:1024 设计师:我叫白小胖 返回首页

打赏作者

右耳要加油

你们的鼓励是我创作最大的动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值