鱼C论坛

 找回密码
 立即注册
查看: 1581|回复: 6

[已解决]求助大佬这俩个代码应该怎样写

[复制链接]
发表于 2021-10-22 13:11:45 | 显示全部楼层 |阅读模式
10鱼币
1.用列表实现筛选法求素数
2.用集合实现筛选法求素数

麻烦,大佬们代码加上注释,谢谢!!
最佳答案
2021-10-22 13:11:46
本帖最后由 傻眼貓咪 于 2021-10-22 13:54 编辑

为什么要用 enumurate?
  1. isPrime = lambda num: False if num < 2 else True if num == 2 else False if any([bool(not (num%i)) for i in range(2, num)]) else True # 函数:用于检测整数是否是素数

  2. A = [i for i in range(100) if isPrime(i)]  # 列表筛选
  3. B = {i for i in range(100) if isPrime(i)}  # 集合筛选
  4. C = list(filter(isPrime, range(100)))      # filter 列表筛选
  5. D = set(filter(isPrime, range(100)))       # filter 集合筛选

  6. print(A)
  7. print(B)
  8. print(C)
  9. print(D)
复制代码
  1. [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. {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}
  3. [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]
  4. {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}
复制代码

最佳答案

查看完整内容

为什么要用 enumurate?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-22 13:11:46 | 显示全部楼层    本楼为最佳答案   
本帖最后由 傻眼貓咪 于 2021-10-22 13:54 编辑

为什么要用 enumurate?
  1. isPrime = lambda num: False if num < 2 else True if num == 2 else False if any([bool(not (num%i)) for i in range(2, num)]) else True # 函数:用于检测整数是否是素数

  2. A = [i for i in range(100) if isPrime(i)]  # 列表筛选
  3. B = {i for i in range(100) if isPrime(i)}  # 集合筛选
  4. C = list(filter(isPrime, range(100)))      # filter 列表筛选
  5. D = set(filter(isPrime, range(100)))       # filter 集合筛选

  6. print(A)
  7. print(B)
  8. print(C)
  9. print(D)
复制代码
  1. [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. {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}
  3. [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]
  4. {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}
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-10-22 13:13:44 | 显示全部楼层
要使用 enumerate和filter
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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)),素数是整数啊,大哥,无需复杂化代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 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([bool(not (num%i)) for i in range(2, num)]) 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[index + 1:] = filter(lambda x: x % value != 0, lst[index + 1:])
        print(lst)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-23 14:43:47 | 显示全部楼层
本帖最后由 傻眼貓咪 于 2021-10-23 14:45 编辑
pallas 发表于 2021-10-23 14:18
题目要求
大佬,这个是参考代码,但是红色部分不是很懂能麻烦解释以下吗?
1.您的代码

关于我的代码:(采用最简单方法找素数)
  1. isPrime = lambda num: False if num < 2 else True if num == 2 else False if any([bool(not (num%i)) for i in range(2, num)]) else True
复制代码
如同
  1. def isPrime(num):
  2.     if num < 2:
  3.         return False
  4.     elif num == 2:
  5.         return True
  6.     for i in range(2, num):
  7.         if not (num%i):
  8.             return False
  9.     return True
复制代码
以上两者函数相同,只是我用一行代码简单化而已



参考代码 2:属於比较深入的素数检查方式,一般用到平方根,可以参考我曾经发过的的帖子
质数 - 米勒-拉宾质数判定法 Miller–Rabin Primality Test https://fishc.com.cn/thread-203646-1-1.html(出处: 鱼C论坛)(代码比较复杂,是有关高级数学,仅供参考)


至於为什麽要用平方根,如图:(因为太深,仅供参考,网路应该有中文版,解说应该比我好)
素数.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 15:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表