求助大佬这俩个代码应该怎样写
1.用列表实现筛选法求素数2.用集合实现筛选法求素数
麻烦,大佬们代码加上注释,谢谢!!{:10_254:} 本帖最后由 傻眼貓咪 于 2021-10-22 13:54 编辑
为什么要用 enumurate?isPrime = lambda num: False if num < 2 else True if num == 2 else False if any() else True # 函数:用于检测整数是否是素数
A = # 列表筛选
B = {i for i in range(100) if isPrime(i)}# 集合筛选
C = list(filter(isPrime, range(100))) # filter 列表筛选
D = set(filter(isPrime, range(100))) # filter 集合筛选
print(A)
print(B)
print(C)
print(D)
{2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97}
{2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97} 要使用 enumerate和filter
傻眼貓咪 发表于 2021-10-22 13:52
为什么要用 enumurate?
for i in range(2, num)
强迫症 ,建议改成
for i in range(2, int(num**.5)){:10_292:} kogawananari 发表于 2021-10-23 13:56
for i in range(2, num)
强迫症 ,建议改成
这不是 C/C++,无需复杂化代码,简单易懂,再来就是谢谢你的建议,但是我实在不明白为什么要写成 for i in range(2, int(num**.5)),素数是整数啊,大哥,无需复杂化代码 傻眼貓咪 发表于 2021-10-22 13:52
为什么要用 enumurate?
题目要求
大佬,这个是参考代码,但是红色部分不是很懂能麻烦解释以下吗?
1.您的代码
lambda num: False if num < 2 else True if num == 2 else False if any() else True
2.参考代码
# 输入一个大于 2 的自然数,然后输出小于该数字的所有素数组成的列表
maxNumber = int(input('请输入一个大于2的自然数:'))
lst = list(range(2, maxNumber))
# 最大整数的平方根 这里为什么要平方根呢?
m = int(maxNumber ** 0.5)
for index, value in enumerate(lst):
# 如果当前数字已大于最大整数的平方根,结束判断
if value > m:
break
# 对该位置之后的元素进行过滤
lst = filter(lambda x: x % value != 0, lst)
print(lst) 本帖最后由 傻眼貓咪 于 2021-10-23 14:45 编辑
pallas 发表于 2021-10-23 14:18
题目要求
大佬,这个是参考代码,但是红色部分不是很懂能麻烦解释以下吗?
1.您的代码
关于我的代码:(采用最简单方法找素数)
isPrime = lambda num: False if num < 2 else True if num == 2 else False if any() else True如同def isPrime(num):
if num < 2:
return False
elif num == 2:
return True
for i in range(2, num):
if not (num%i):
return False
return True以上两者函数相同,只是我用一行代码简单化而已
参考代码 2:属於比较深入的素数检查方式,一般用到平方根,可以参考我曾经发过的的帖子
质数 - 米勒-拉宾质数判定法 Miller–Rabin Primality Test https://fishc.com.cn/thread-203646-1-1.html(出处: 鱼C论坛)(代码比较复杂,是有关高级数学,仅供参考)
至於为什麽要用平方根,如图:(因为太深,仅供参考,网路应该有中文版,解说应该比我好)
页:
[1]