找到低于10的素数之和

时间:2015-04-29 07:29:22

标签: python-3.x primes

>>> k=1
>>> sum=0
>>> for i in range (2,10):
        for j in range (2,i):
            if ((i%j)==0):
                k=0
    if (k==1):
        sum+=i


>>> print(sum)
    5

我不知道为什么,但是这段代码,而不是给出17作为输出,总是给出5。

3 个答案:

答案 0 :(得分:4)

每次k循环移动到下一个数字时,您需要将1标记设置回for i

for i in range (2,10):
    k = 1
    for j in range (2,i):
        if ((i%j)==0):
            k=0
    if (k==1):
        sum+=i

如果不这样做,您的代码只会发现5为素数,并在此之后忽略任何内容。

请注意,在Python中,0在布尔上下文中使用时被视为 false (例如if语句),1为真,因此您只需使用{{1} }。更好的是,使用if k:True以及更好的变量名称,例如False而不是is_prime。你可以放下很多这些括号:

k

我还利用了这样一个事实:你只需要检查一个数字的平方根,看看是否有除数,显着减少了循环。

最后但并非最不重要的是,您可以使用sum = 0 for num in range (2, 10): is_prime = True for i in range (2, int(num ** 0.5) + 1): if not num % i: is_prime = False if is_prime: sum += num 构造;如果在for ... else循环中使用break,则for分支永远不会被执行,但如果else循环完成而没有突破,则;这消除了对布尔标志的需要:

for

答案 1 :(得分:0)

在@Martijn Pieters的回答中注明了问题,您可以在sum中使用generator expression

>>> sum(i for i in range(2,10) if all(i%j!=0 for j in range(2,i)))
17

答案 2 :(得分:0)

sum=0
limit=10
for n in range(2,limit+1):
  if all(n % i for i in range(2, n)):
    sum += n
print sum

Output: 17