我知道存在类似的问题,但我想知道我的代码有什么问题。提前谢谢!
isum = 0
l = list(range(2, uplim + 1))
while l != []:
isum += l[0]
temp = list(range(l[0], uplim + 1, l[0]))
l = list(set(l) - set(temp))
print(isum)
说明:第一个循环执行将向sum变量添加2(作为列表中的第一个术语),并从列表中删除所有2的倍数。 3现在将成为列表中的第一个术语,这将被添加到isum,然后删除所有3的倍数。 5现在将是第一个术语(因为4被删除 - 是2的倍数)等。
答案 0 :(得分:0)
集合是无序的。代码背后的想法是可以的,但是将列表转换为集合会丢失排序信息,而转换回列表会产生比随机排序更糟糕的情况;即使是统计数据,也无法对此做出任何保证。 l
的第一个元素并不保证是最低的,所以它不能保证是一个素数,一切都会变成地狱。