首先我们要明白什么是素数?
只能被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,则遍历出去。