📅  最后修改于: 2023-12-03 15:07:34.859000             🧑  作者: Mango
这是国际空间研究组织ISRO在2017年5月的一道编程题,题目如下:
给定一个整数n,找出小于等于n的所有素数的总和。实现一个函数,该函数应该包含一个整数作为参数,并返回小于等于该整数的所有素数的总和。
输入:
10
输出:
17
判断素数的方法有很多,这里介绍一种较为简单的试除法。
对于一个大于1的正整数n,如果它能够被2到sqrt(n)之间的任意一个正整数整除,那么n就不是素数。
反之,如果n不能被2到sqrt(n)之间的任何一个整数整除,那么n就是一个素数。
根据这个方法,我们可以枚举从2到n之间的每一个数,判断其是否是素数,并求和。
由于对每一个数都需要进行sqrt(n)次试除,所以这个算法的时间复杂度为O(n*sqrt(n))。
def is_prime(num):
"""
判断num是否是素数
"""
if num <= 1:
return False
for i in range(2, int(num**0.5)+1):
if num % i == 0:
return False
return True
def sum_of_primes(n):
"""
返回小于等于n的素数的总和
"""
res = 0
for i in range(2, n+1):
if is_prime(i):
res += i
return res
代码实现比较简单,首先是一个判断素数的函数is_prime,然后是求小于等于n的素数和的函数sum_of_primes。
我们可以通过调用sum_of_primes函数来得到答案。