我正在尝试这个问题作为练习,但我被卡住了。我会尽量做到尽可能准确
我想找到列表作为输入的素数之和
假设给我的函数的输入是一个像= [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)
注意 - 通过列表,程序应该工作。我还没写过这部分。
提前致谢
答案 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]))