鱼C论坛

 找回密码
 立即注册
查看: 1417|回复: 4

求助大佬python使用集合实现筛选法求素数这个的解释

[复制链接]
发表于 2021-10-23 22:10:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
                # 使用集合实现筛选法求素数
                num = int(input("请输入大于2的自然数"))
                number = set(range(2, num))
                m = int(num ** 0.5) + 1
                primesLessThanM = [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 primesLessThanM:
                    for i in range(2, num // p + 1):
                        number.discard(i * p)
                print(number)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-10-23 22:11:06 | 显示全部楼层
能麻烦大佬都解释一下吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-23 22:34:29 | 显示全部楼层
比如检测47是不是质数 需要用47除以2 除以3 除以4 除以5一直除到6看能不能整除  就是质数

因为6是  int(sqrt( 47))   如果47能分解为两个因数一定是一个比根号47大一个比根号47小

但是你这个没用到集合

用集合的话大概就是要用把之前的质数放到一个集合 下次检测新的质数可以只用这个集合里的去除
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-24 12:04:15 | 显示全部楼层
kogawananari 发表于 2021-10-23 22:34
比如检测47是不是质数 需要用47除以2 除以3 除以4 除以5一直除到6看能不能整除  就是质数

因为6是  int ...

m = int(num ** 0.5) + 1
大佬,这里为什么要先开根号然后加1呢?
[p for p in range(2, m) if 0 not in [p % d for d in range(2, int(p ** 0.5) + 1)]]
这句还是没懂,能麻烦您写一下这个展开的吗?
谢谢!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-24 12:41:05 | 显示全部楼层
pallas 发表于 2021-10-24 12:04
m = int(num ** 0.5) + 1
大佬,这里为什么要先开根号然后加1呢?
]

加1是因为range是左闭右开区间

展开就算了 我这里没装python怕给你展开错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 11:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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