pallas 发表于 2021-10-23 22:10:24

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

                # 使用集合实现筛选法求素数
                num = int(input("请输入大于2的自然数"))
                number = set(range(2, num))
            m = int(num ** 0.5) + 1
                primesLessThanM = ]
                for p in primesLessThanM:
                  for i in range(2, num // p + 1):
                        number.discard(i * p)
                print(number)

pallas 发表于 2021-10-23 22:11:06

能麻烦大佬都解释一下吗?

kogawananari 发表于 2021-10-23 22:34:29

比如检测47是不是质数 需要用47除以2 除以3 除以4 除以5一直除到6看能不能整除就是质数

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

但是你这个没用到集合

用集合的话大概就是要用把之前的质数放到一个集合 下次检测新的质数可以只用这个集合里的去除

pallas 发表于 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呢?
]
这句还是没懂,能麻烦您写一下这个展开的吗?
谢谢!!

kogawananari 发表于 2021-10-24 12:41:05

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


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

展开就算了 我这里没装python怕给你展开错了
页: [1]
查看完整版本: 求助大佬python使用集合实现筛选法求素数这个的解释