题目要求
使用函数求素数和
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)。