首先我们要明白什么是素数?
只能被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判断,为真即为非素数。
第二种集合实现筛选素数
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)]] for?p?in?pri: ????for?i?in?range(2,maxNumber//p+1): ????????numbers.discard(i*p) print(numbers)
这个就简化了一个思想,判断一个数有没有除了本身和1之外的因数,只需对他求根号取整
eg,15=3x5? ?15**0.5就在3和5之间。所以这样做就把区间缩小,只需要判断n**0.5之内的数字即可。再往后解读就是运用了列表推导式简写了代码。
|