本系列文章为同学困扰的python做出作业答案汇总,答案皆为本学生自己边学边做汇总上传的,编排不易,希望大家喜欢。
本作业所有内容均在github上有留存,每次作业github上会最先发布,CSDN上需要编辑将会慢一两天,着急完成作业的同学可以前往github抢先学习:Opve2/homework: 这个作业 (github.com)
素数求和(列表)
def is_prime(n): # 判断素数函数
if n < 2:
return False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
else:
return True
def f(n): # 找小于n的素数并求和
sum_n = []
sum_f = 0
count = 0
for i in range(n, 1, -1): #找小于n的最大的10个素数
if is_prime(i):
count += 1
if count <= 10:
sum_n.append(i)
sum_f += i
else:
break
sum_n.sort()
sum_n = map(str,sum_n)
return '+'.join(sum_n) +'=' + str(sum_f)
if __name__ == '__main__':
p=int(input())
print(f(p))
思考
本题开始#找小于n的最大的10个素数时采用的是如下代码
for i in range(n+1):
if is_prime(i):
sum_n.append(i)
结果因为题目要求30秒内运行完成 ,而失败
所以像最开始写的先储存所有小于你的素数,遇到数特别大时会出现运行时间太长的问题,既然题目只要最后10个素数,那么我们就从后开始遍历取10个就截止,这样就节省了时间。