如何在Python 3.5中找到给定范围内的素数之和?

时间:2016-03-27 18:40:39

标签: python sum primes

我设法使用以下方法创建给定范围内的素数列表:

import numpy as np  

num = int(input("Enter a number: "))  

for a in range(2,num+1):         
  maxInt=int(np.sqrt(a)) + 1  
  for i in range(2,maxInt):
    if (a%i==0):  
      break  
  else: 
    print (a)

我想现在找到范围内所有素数的总和,所以我只是放下

print (sum(a))

但是当我尝试这样做时,我会得到以下追溯:

Traceback (most recent call last):
  File "C:/Users/Jason/PycharmProjects/stackidiots/scipuy.py", line 11, in <module>
    print(sum(a))
TypeError: 'int' object is not iterable

3 个答案:

答案 0 :(得分:2)

在您的情况下,a是一个在循环中使用的整数变量,不是一个可迭代的。

import numpy as np

num = int(input("Enter a number: "))

primes = []

for a in range(2,num+1):

  maxInt= int(np.sqrt(a)) + 1

  for i in range(2,maxInt):

    if (a%i==0):
      break

  else:
    primes.append(a)

print(sum(primes))

因此,如果我们只是将它们附加到列表中而不是打印它们,那么在获取列表sum的{​​{1}}时会得到以下输出。

primes

答案 1 :(得分:0)

如果你想使用 sum ,你可以创建一个生成器函数,在循环中产生每个a,这样你就有一个 iterable 来调用sum :

num = int(input("Enter a number: "))

def sum_range(num):
    for a in range(2, num + 1):
        maxInt = int(a **.5) + 1 
        for i in range(2, maxInt):
            if a % i == 0:
                break
        else:
            yield a

print(sum(sum_range(num)))

答案 2 :(得分:-1)

在循环中总结它们

import numpy as np  

num = int(input("Enter a number: "))  

result=0
for a in range(2,num+1):         
  maxInt=int(np.sqrt(a)) + 1  
  for i in range(2,maxInt):
    if (a%i==0):  
      break  
    else: 
      print (a)
      result+=a

print(result)