关于python Eratosthenes的筛子,如果我使用list和int太大,我该怎么办?

时间:2017-07-02 14:15:43

标签: python python-3.x

我正在制作Eratosthenes的筛选算法,我成功了一些整数,如31和13195.所以我要找到600851475143的素数。但Python说整数太大而无法转换为C ssize_t。

所以这是我的代码。

x = 600851475143
i = 2

tmp_result = list(range(2, x+1))
result = []

while tmp_result:
    n = 1
    result.append(tmp_result[0])
    base = tmp_result[0]
    while base*n < x+1:
        product=base*n
        if product in tmp_result:
            tmp_result.remove(product)
            n = n + 1
        else :
            n = n + 1


print(result)
print(tmp_result)

我想知道,

在python太长的列表中无法制作?

什么是C ssize_t?

` 很多

1 个答案:

答案 0 :(得分:0)

问题不在于列表的长度,而是在{C}中实现range()。您应该优化算法以避免range()

巨大的名单会占用大量内存。如果你有很多(虚拟)内存,这是可能的。但你也可以更好地优化它。