我正在制作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?
` 很多
答案 0 :(得分:0)
问题不在于列表的长度,而是在{C}中实现range()
。您应该优化算法以避免range()
。
巨大的名单会占用大量内存。如果你有很多(虚拟)内存,这是可能的。但你也可以更好地优化它。