在Python中查找列表中素数的总和

时间:2016-08-01 17:05:25

标签: loops python-3.x math

我正在尝试这个问题作为练习,但我被卡住了。我会尽量做到尽可能准确

我想找到列表作为输入的素数之和

假设给我的函数的输入是一个像= [17,51,29,39]的列表,所以它应该返回46作为答案为17 + 29 = 46

这里是我能写的代码:

def sumprimes(l):
    sum=0
    for value in l:
        for i in range(1,float((value)/2)):
            if value%i==0:
                      sum+=value     
    print(sum) 

注意 - 通过列表,程序应该工作。我还没写过这部分。

提前致谢

5 个答案:

答案 0 :(得分:1)

您的代码存在的问题是您使用range浮点值。 你真正需要的是整数除法。在Python 3中,这是//运算符:

def sum_primes(l):
    total = 0
    for value in l:
        for i in range(2, value // 2):
            if value%i == 0:
                break
        else:
            total += value     
    return total

此外,您需要检查值是否可以被除1和其自身之外的每个数字整除。所有数字都可以被1整除。所以从2开始范围。此外,它是可以整除的数字,不是素数,所以在你的for循环中添加一个else子句,只有你的for循环才会执行完成没有破坏,即你检查的数字没有划分值,因此值是素数!

答案 1 :(得分:1)

你最好创建一个函数来测试数字是否为@wim所说的素数。

def is_prime(n):
    if n < 2:
        return False
    elif n <= 3:
        return True
    elif n % 2 == 0:
        return False

    # round up the sqrt of n
    length = int(n**.5) + 1  # n**.5 is equal to sqrt(n)
    for i in range(3, length, 2):
        if n % i == 0:
            return False

    return True

这是一个简单而有效的素性测试。 然后你可以简单地总结:

def sum_primes(l):
    return sum(n for n in l if is_prime(n))

答案 2 :(得分:1)

以下是您的查询解决方案

def sumprimes(l):
primeNum = []
for item in l:
    is_prime = True
    if(item >= 2):
        maxInt = int(item ** 0.5) + 1
        for i in range(2, maxInt):
            if(item % i == 0):
                is_prime = False
                break
        if(is_prime):
            primeNum.append(item)
return(sum(primeNum))

print(function([-3,1,6]))

答案 3 :(得分:0)

def sumprime(list):
    sum =0
    flag =1
    for i in range(len(list)):
        num = list[i]
        for j in range(2, num):
            if list[i]%j ==0:
                flag = 0
                break
            else:
                flag = 1
        if num ==2:
            flag =1
        if flag ==1:
            sum =sum +list[i]
    return(sum)

list =[2,3,5,7]
print(sumprime(list))

答案 4 :(得分:0)

def prime(n):
    count = 0
    if n > 1:
        for i in range(1,n+1):
            if n % i == 0:
                count = count + 1        
        if count == 2:
            return True
        else:
            return False

def sumprimes(l):
    x = list(filter(prime,l))
    y = sum(x)
    return y
print(sumprimes([-3,3,1,13]))