用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,则遍历出去。

你可能感兴趣的:(python,算法,概率论)