Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中1和N之间的所有素数之和_Python_Python 3.x - Fatal编程技术网

Python中1和N之间的所有素数之和

Python中1和N之间的所有素数之和,python,python-3.x,Python,Python 3.x,我是编程新手。在试图解决这个问题时,我得到了错误的答案。我检查了我的代码很多次,但都没能找出错误。请帮我解决这个简单的问题。问题如下: 给定一个正整数N,计算1和N之间的所有素数之和(包括)。输入的第一行包含一个整数T,表示测试用例的数量T测试用例如下。每个测试用例包含一行输入,其中包含N。对于每个测试用例,在新行中打印1和N之间的所有素数之和 我的代码是: from math import sqrt sum = 0 test = int(input()) for i in range(tes

我是编程新手。在试图解决这个问题时,我得到了错误的答案。我检查了我的代码很多次,但都没能找出错误。请帮我解决这个简单的问题。问题如下:

给定一个正整数N,计算1N之间的所有素数之和(包括)。输入的第一行包含一个整数T,表示测试用例的数量T测试用例如下。每个测试用例包含一行输入,其中包含N。对于每个测试用例,在新行中打印1N之间的所有素数之和

我的代码是:

from math import sqrt 
sum = 0
test = int(input())
for i in range(test):
    max = int(input())
    if max==1:
        sum = 0
    elif max==2:
        sum += 2
    else:    
        sum = sum + 2
        for x in range(3,max+1):
            half = int(sqrt(max)) + 1
            for y in range(2,half):
                res = x%y
                if res==0:
                    sum = sum + x
                    break
    print(sum)     

对于输入5和10,我的代码分别给出输出6和48,而正确答案分别是10和17。请找出我代码中的错误。

首先,在for i循环的开头声明sum为零

问题在于几乎在代码末尾的if语句,当您将x添加到总和时,如果res等于零,这意味着该数字实际上不是质数。您可以看到这种情况,因为输入5时得到的输出是6,因为从1到5(包括5)的范围内唯一的非素数是4,并且在开始时已将2添加到总和中

最后但并非最不重要的一点是,您应该更改

half = int(sqrt(max)) + 1
排队

half = int(sqrt(x)) + 1
尝试使用我提供的信息,自己修复代码。通过不复制他人的代码,您可以学到最多


快乐编码

我相信您代码中的错误可能来自以下代码行:

for x in range(3,max+1):
        half = int(sqrt(max)) + 1
由于使用x循环,因此应将int(sqrt(max))更改为int(sqrt(x)),如下所示:

for x in range(3,max+1):
        half = int(sqrt(x)) + 1
您的代码试图查看max是否为素数N次,您应该查看1-N中的每个数字是否为素数


这是我第一次回答问题,如果您需要更多帮助,请告诉我。

在这里,我实现了一个简单的程序来查找1到n之间的所有素数之和。 将PrimeAddioType()视为函数和IP作为输入参数。它可能会帮助你解决问题。试试看

代码段:

def primeAddition(ip): 
    # list to store prime numbers...
    prime = [True] * (ip + 1) 

    p = 2
    while p * p <= ip: 
        # If prime[p] is not changed, then it is a prime...
        if prime[p] == True: 
            # Update all multiples of p...
            i = p * 2
            while i <= ip: 
                prime[i] = False
                i += p 
        p += 1    

    # Return sum of prime numbers...
    sum = 0
    for i in range (2, ip + 1): 
        if(prime[i]): 
            sum += i 
    return sum

#The program is ready... Now, time to call the primeAddition() function with any argument... Here I pass 5 as an argument...
#Function call...

print primeAddition(5)
def预处理添加(ip):
#存储素数的列表。。。
prime=[True]*(ip+1)
p=2

而p*p是因为你的逻辑不正确

for y in range(2,half):
    res = x%y
    if res==0:
        sum = sum + x
        break
在这里,你检查因子,如果有因子,那么加上和素数相反的和。因此,检查没有因子的数字(1除外)


对您拥有的内容稍作修改:

from math import sqrt 
sum = 0
test = int(input())
max = int(input())


for x in range(test,max+1):
    if x == 1:
        pass
    else:
        half = int(sqrt(x)) + 1
        for y in range(2,half):
            res = x%y
            if res==0:
                break
        else:
            sum = sum + x

print(sum)    
您最大的错误是在中断之前执行sum=sum+x,而不是在else语句之外


PS:(虽然可以)我建议不要在代码中使用变量名,比如max和sum。这些是现在被重写的特殊函数。

这是您代码中最不完整的部分,它所做的与您想要的相反:

res = x%y
if res==0:
    sum = sum + x
    break
只有在不中断整个循环的情况下才能增加
sum
。(在重新定义Python内置时,不要使用
sum
。)这可以通过在
for
循环中使用
else
的特例来检查,也称为“无中断”。我做了以下更改,并纠正了一些效率低下的问题:

from math import sqrt

T = int(input())

for _ in range(T):
    N = int(input())

    sum_of_primes = 0

    if N < 2:
        pass
    elif N == 2:
        sum_of_primes = 2
    else:
        sum_of_primes = 2

        for number in range(3, N + 1, 2):

            for odd in range(3, int(sqrt(number)) + 1, 2):
                if (number % odd) == 0:
                    break
            else:  # no break
                sum_of_primes += number

    print(sum_of_primes)

可能是重复的谢谢,@AndersonGreen。但是,我想知道我的代码中的错误。通过
test
变量(读取
max
变量并运行代码的次数)查看此实现的错误。也就是说,你错过了外环,我应该澄清一下。这是为了找到test和maxHelp之间的素数之和而设置的,我确信,但OP明确表示“但是,我想知道我的代码中的错误。”您建议的代码更改是必要的,但不足以修复OP的程序。
from math import sqrt

T = int(input())

for _ in range(T):
    N = int(input())

    sum_of_primes = 0

    if N < 2:
        pass
    elif N == 2:
        sum_of_primes = 2
    else:
        sum_of_primes = 2

        for number in range(3, N + 1, 2):

            for odd in range(3, int(sqrt(number)) + 1, 2):
                if (number % odd) == 0:
                    break
            else:  # no break
                sum_of_primes += number

    print(sum_of_primes)
> python3 test.py
3
5
10
10
17
23
100
>