微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

即使我使用了eratosthenes的筛网并且我也使用集合而不是列表,为什么我的质数代码不能用于大数?

如何解决即使我使用了eratosthenes的筛网并且我也使用集合而不是列表,为什么我的质数代码不能用于大数?

我的代码

import math
n=int(input('Enter the number'))
b=list(range(2,n+1))
for i in range(2,int(math.sqrt(n))+1):
    for j in b:
        if j!=i and j%i==0:
            b[b.index(j)]=0

b={i for i in b if not i==0}
c={i for i in b if n%i==False}
print(b)
print(c)

这个,我用自己的方式实施了筛子。为什么编号为600851475143的欧拉计划问题3不起作用?我得到了:

Enter the number600851475143
Traceback (most recent call last):
  File "C:/Users/raja/AppData/Local/Programs/Python/python37-32/ui.py",line 6,in <module>
    b=list(range(2,n+1))
OverflowError: Python int too large to convert to C ssize_t

我只是一个初学者和自学成才。我欢迎所有简单的建议,请以一种善意的方式指出我的错误:)。 谢谢。

解决方法

erathesthenes筛用于查找给定范围内的所有素数,查找时间恒定,且o(n)空间和时间复杂。 因此,当您需要检查许多数字是否有素数条件时,最好使用它。由于空间复杂度为o(n),因此对于高数,它需要巨大的空间。

如果您需要检查一次质数,那么最好以o(n)的时间复杂度和o(1)的空间复杂度即时进行计算。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。