2013-11-24 40 views
-1

我知道存在类似的问题,但我想知道特别是我的代码有什么问题。提前致谢!查找低于给定限制的质数总和

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) 

说明:第一个循环执行将增加2(即在列表中的第一项),以总和变量和从列表中删除的2的倍数。 3现在将成为列表中的第一个术语,这将被添加到isum,然后是所有3的倍数被删除。 5将成为第一个任期(因为4被删除 - 是2的倍数)等。

+0

它不像你想要的那样行事? –

+2

欢迎来到Stack Overflow!看起来你希望我们为你写一些代码。 尽管许多用户愿意为遇险的编码人员编写代码,但他们通常仅在海报已尝试自行解决问题时才提供帮助。 证明这一努力的一个好方法是包含迄今为止编写的代码, 示例输入(如果有的话),预期的输出以及实际获得的输出(控制台输出,堆栈跟踪,编译器错误 - 无论什么适用)。 您提供的细节越多,您可能收到的答案越多。检查[常见问题]和[问] –

+0

它只是不输出正确的答案:/ – NVH

回答

0

集合是无序的。代码背后的想法是可以的,但将列表转换为集合会丢失订购信息,并且转换回列表会产生比随机排序更糟糕的结果;即使在统计上,您也无法对此作出任何保证。 l的第一个元素不能保证是最低的,所以它不能保证成为素数,所有的东西都会下地狱。

+0

谢谢,这解释了很多! – NVH

相关问题