📌  相关文章
📜  国际空间研究组织 | ISRO CS 2015 |问题 43(1)

📅  最后修改于: 2023-12-03 15:23:03.848000             🧑  作者: Mango

国际空间研究组织 | ISRO CS 2015 |问题 43

这道问题是 ISRO CS 2015 的一道编程题,需要实现一个 Python 函数,对于输入的整数 N,返回所有小于 N 的质数的和。

问题描述

输入一个整数 N,计算小于 N 的所有质数的和。

函数签名
def sum_of_primes(n: int) -> int:
    pass
输入
  • 一个整数 N(1 <= N <= 10^6)
输出
  • 返回小于 N 的所有质数的和,如果不存在质数,则返回 0。
示例
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 的质数并求和。

具体实现方法如下:

  1. 对于每个数 x(2 到 N),检查 x 是否是质数。
  2. 如果 x 是质数,将其加入质数列表中。
  3. 最后将质数列表中的所有数求和。

为了判断一个数是否是质数,我们也可以用如下方法:

  1. 对于每个数 x(2 到 N),检查是否能被小于 x 的所有素数整除。
  2. 如果不能,那么 x 也是质数,将其加入质数列表中。
  3. 最后将质数列表中的所有数求和。
代码实现
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 个质数。