📅  最后修改于: 2023-12-03 15:23:03.848000             🧑  作者: Mango
这道问题是 ISRO CS 2015 的一道编程题,需要实现一个 Python 函数,对于输入的整数 N,返回所有小于 N 的质数的和。
输入一个整数 N,计算小于 N 的所有质数的和。
def sum_of_primes(n: int) -> int:
pass
assert sum_of_primes(10) == 17 # 2 + 3 + 5 + 7 = 17
assert sum_of_primes(20) == 77 # 2 + 3 + 5 + 7 + 11 + 13 + 17 + 19 = 77
assert sum_of_primes(30) == 129 # 2 + 3 + 5 + 7 + 11 + 13 + 17 + 19 + 23 + 29 = 129
assert sum_of_primes(0) == 0
题目要求返回小于 N 的所有质数的和,因此我们需要找出所有小于 N 的质数并求和。
具体实现方法如下:
为了判断一个数是否是质数,我们也可以用如下方法:
def sum_of_primes(n: int) -> int:
primes = [] # 用于存储质数的列表
for x in range(2, n):
is_prime = True
for p in primes:
if x % p == 0:
# 如果 x 能被之前的质数整除,那么它不是质数
is_prime = False
break
if is_prime:
primes.append(x)
return sum(primes)
该函数的时间复杂度为 $O(n^2)$,其中 $n$ 是输入的整数 N。对于每个数 x(2 到 N),都会检查是否能被小于 x 的所有素数整除,最坏情况下,时间复杂度为 $O(n^2)$,空间复杂度为 $O(n)$,因为最多需要存储 N 个质数。