|
发表于 2020-10-3 21:25:14
|
显示全部楼层
学艺不精,不是很会用库,所以琢磨了一个不用库的办法,提供一个思路。所以比较啰嗦,没有效率,搞了4个列表。
- num1 = []
- num2 = []
- num3 = []
- num4 = []
- # 产生一个列表num1,包含1-30
- for k in range(1,31):
- num1.append(k)
- # 复制一个列表num2,用来最后剔除不是素数都数
- num2 = num1[:]
- # 复制一个列表num3,用来进行判断一个数是否素数
- num3 = num1[:]
- # 在num3中,从第一个大于1的数开始循环
- for m in num3:
- if m > 1:
- # 第二个循环,循环目标是num3[:m],意思是从1开始到m自身(例如:m=5,num3[:5]
- # 就是[1,2,3,4,5]
- for n in num3[:m]:
- # 该print用于验证m、n的对应关系
- # print('m=',m,'n=',n)
- # m and n 求余,是否=0,=0是整除
- if m % n == 0:
- # 本句用于标记,方便查看,可以删除
- print(m,'这个数可以被',n,'整除')
- # 如果n不是m自身一样的数
- if n != m:
- # 如果n不是等于1,此2句if判断是否素数
- if n != 1:
- # 用于标记,方便查看,可以删除
- print(m,'不是素数')
- # 将所有不是素数的数方在num4这个列表
- num4.append(m)
- # 列表num4包含了所有非素数的数,但是因为是循环,所以有很多重复项
- # print(num4)
- # 通过把列表num4中的数全部循环在列表num2中剔除的方法,把num2中的非素数全部剔除
- for k in num4:
- if k in num2:
- num2.remove(k)
- # 根据素数定义,要大于1,而num2中原本包含1,需要剔除
- num2.remove(1)
- # 输出最后答案
- print(num2)
复制代码 |
|