Python中1到N之间所有质数的总和[第2部分]

时间:2018-12-27 06:14:15

标签: python python-3.x

只是澄清一下:) 这是我的previous question的第2部分。我发布了一个新问题,因为前一个问题有点混乱,并且由于我是Stack的新手,所以我仍在学习这里的工作方式。

实施建议后,我之前的代码开始工作,但是开始出现“超过时间限制”的问题。我已尽力减少代码,但TLE仍在发生。这是我的新代码:

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

这一次代码产生了正确的结果。我只想知道如何使我的代码更高效并减少时间限制? TLE Image

1 个答案:

答案 0 :(得分:1)

嵌套循环太多,会增加时间复杂度。

这是一个简单的函数,占用的时间更少。

import time

def sum_of_prime(n):
    prime =[]
    for num in range(2,int(n)):
        if all(num%i!=0 for i in range(2,num)):
            prime.append(num)
    return sum(prime[0:len(prime)])


n = input("Enter value of n:")
start = time.clock()
print(sum_of_prime(n))
print (time.clock() - start)