【问题描述】
输入一个正整数n,统计从[0,n]之间的最大的10个素数之和。本题保证测试用例至少有10个满足条件的素数。
例如:输入31 ,应求得3,5,7,11,13,17,19,23,29,31之和。
本题要求使用自定义函数完成,代码框架参考如下:
def isprime(n): #判断素数函数
......
def f(n): #找小于n的素数并求和
......
......
p=int(input())
print(f(p))
【样例输入】
31
【样例输出】
158
【完整代码】
def isprime(n): # n >= 2
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True
def f(n):
ls = []
for i in range(2, n + 1):
if isprime(i): # 判断是否为素数
ls.append(i)
return sum(ls[-10:]) # 只取最后十个数
p = int(input())
print(f(p))
【代码讲解】
def isprime(n): # n >= 2
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True
循环遍历下n有没有除了1和n外的因数,下界从2开始,上界采取n的平方根以减少循环次数,int(float)截断取整。当n=2时,range(2, 2),实际上不会进行for循环