📌  相关文章
📜  国际空间研究组织 | ISRO CS 2017 – 5 月 |问题 34(1)

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

ISRO CS 2017 – 5 月 |问题 34

这是国际空间研究组织ISRO在2017年5月的一道编程题,题目如下:

给定一个整数n,找出小于等于n的所有素数的总和。实现一个函数,该函数应该包含一个整数作为参数,并返回小于等于该整数的所有素数的总和。

输入格式
  • 一个整数n,1 <= n <= 10^6
输出格式
  • 一个整数,表示小于等于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函数来得到答案。