输入一个正整数n,统计从[0,n]之间的最大的10个素数之和。本题保证测试用例至少有10个满足条件的素数。(面对较大的数时会运行超时(2000ms),请问怎样优化?)

def Is(a):
for i in range(2,a):
if a%i==0:
return False
return True

n=int(input())
b=[]
s=0
for c in range(2,n+1):
if Is(c):
b.append(str(c))
d=b[-10::]
for g in d:
s+=int(g)
print(s)

考虑从算法上优化,比如判断a是不是素数,只要从2除到其平方根就可以了,而不用除到a。

import math
def Is(a):
    #这里面只需要判断2~根号a之间的值就可以
    for i in range(2,int(math.sqrt(a)) + 1):
        if a%i==0:
            return False
    return True

n=int(input())
b=[]
s=0
for c in range(2,n+1):
    if Is(c):
        print(c)
        b.append(str(c))
d=b[-10::]
for g in d:
    s+=int(g)
print(s)
import math

n = 100
ls = []
result = 0

for i in range(n,1,-1):    # from n to 0
    flag = False
    for j in range(2,int(math.sqrt(i))+1):
        if i%j == 0:
            flag = True
            break
    
    if not flag:   # su shu
        result += i
        if len(ls) <= 10: # only 10
            ls.append(i)
        else:
            break

print(ls,result)