Eratosthenes的筛子不起作用

时间:2017-07-23 00:31:38

标签: python sieve-of-eratosthenes

当我尝试运行此代码时,我的计算机基本崩溃。

有人可以指出原因吗?

我意识到调整列表大小并不是最有效的方法,但即使在 10 下键入任何数字也不会产生任何效果,导致spyder或我的计算机崩溃

我的目标是设置一个课程,我可以存储某个人的号码实例,这样如果有人想要拨打相同的号码,我就不必再次运行该功能。

class eratosthenes(object):

    def __init__(self, b):
        self.b = b
        count1 = 2
        self.lst = []
        while count1 <= b:
            self.lst.append(count1)
            count1+=1

    def sieve(self):
        self.count2 = 2
        while self.count2 < self.b/2.0:
            for i in self.lst:
                if i%self.count2==0:
                    self.lst.remove(i)
            self.count2+=1

a=raw_input("How far are you willing to go in this search for what you seek, young traveler?: ")
q = eratosthenes(a)  
print q.sieve()

1 个答案:

答案 0 :(得分:1)

考虑一下:

lst = [1, 2, 3, 4, 5]
for entry in lst:
    print(entry)
    lst.remove(entry)

您认为代码会打印值1,2,3,4和5.相反(在macOS Sierra上的Python 3.6下),您将获得1,3和5。

当您向下走时,修改列表是禁忌。如果您查看sieve方法,那就是您正在做的事情。

希望这有帮助!