pallas 发表于 2021-10-22 13:11:45

求助大佬这俩个代码应该怎样写

1.用列表实现筛选法求素数
2.用集合实现筛选法求素数

麻烦,大佬们代码加上注释,谢谢!!{:10_254:}

傻眼貓咪 发表于 2021-10-22 13:11:46

本帖最后由 傻眼貓咪 于 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}

pallas 发表于 2021-10-22 13:13:44

要使用 enumerate和filter

kogawananari 发表于 2021-10-23 13:56:47

傻眼貓咪 发表于 2021-10-22 13:52
为什么要用 enumurate?

for i in range(2, num)

强迫症 ,建议改成

for i in range(2, int(num**.5)){:10_292:}

傻眼貓咪 发表于 2021-10-23 14:12:36

kogawananari 发表于 2021-10-23 13:56
for i in range(2, num)

强迫症 ,建议改成


这不是 C/C++,无需复杂化代码,简单易懂,再来就是谢谢你的建议,但是我实在不明白为什么要写成 for i in range(2, int(num**.5)),素数是整数啊,大哥,无需复杂化代码

pallas 发表于 2021-10-23 14:18:44

傻眼貓咪 发表于 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:43:47

本帖最后由 傻眼貓咪 于 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]
查看完整版本: 求助大佬这俩个代码应该怎样写