学校作业6_1序列类型_素数求和(列表)(头哥作业[Python])

   本系列文章为同学困扰的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个就截止,这样就节省了时间。

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值