第6章函数-2 使用函数求素数和 (20 分)

题目要求

使用函数求素数和
prime(p), 其中函数prime当用户传入参数p为素数时返回True,否则返回False. PrimeSum(m,n),函数PrimeSum返回区间[m, n]内所有素数的和。题目保证用户传入的参数1<=m<n。

函数接口定义:

在这里描述函数接口:
prime(p),返回True表示p是素数,返回False表示p不是素数
PrimeSum(m,n),函数返回素数和

裁判测试程序样例:


/* 请在这里填写答案 */

m,n=input().split()
m=int(m)
n=int(n)
print(PrimeSum(m,n))

输入样例:

1 10

输出样例:

17

代码+注释

#判断素数
def prime(p):
	#素数大于1,即从2开始
    if(p<2):
        return False
    #若在2-本身之间存在能另p整除的数,那么p不是素数
    for i in range(2,p):
        if(p%i==0):
            return False
    return True
#素数求和,若是素数则相加
def PrimeSum(m,n):
    res=0
    for i in range(m,n+1):
        if(prime(i)):
            res+=i
    return res

代码结果

在这里插入图片描述

总结

素数定义:指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
根据定义出发,从2开始遍历,若存在能整除的数,则不是素数了。
本题时间复杂度为O(N),但其实不必遍历到自己本身,只需遍历到sqrt(p)即可,所以时间复杂度可以优化到O(N**0.5)。

题外话

对于很多函数的使用还是比较欠缺的,就比如range()函数当中得是整型,sqrt()函数得import math等等。另外判断边界的话,i <= p/i 比 i <= math.sqrt(p) 要好,因为调用函数很花时间,虽然我们平时时间复杂度分析时不大考虑这些。
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值