📌  相关文章
📜  使用Eratosthenes筛子在给定范围内的所有素数之和(1)

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

使用Eratosthenes筛子在给定范围内的所有素数之和

介绍:

在计算机科学领域中,找到一组数中所有素数的算法非常有用。其中一种著名的算法是Eratosthenes筛法,它能够在一个特定范围内找到所有的质数。

该算法基于以下原理:首先,我们将从2开始,筛掉2的倍数,然后筛掉3的倍数,以此类推,直到我们无法筛去比当前数字小的数的倍数。此时剩下的数字就是所有的素数。

这个算法的时间复杂度为O(n*log(log(n))),其中n是范围的上限。

Markdown格式代码片段:

## 使用Eratosthenes筛子在给定范围内的所有素数之和

介绍:

在计算机科学领域中,找到一组数中所有素数的算法非常有用。其中一种著名的算法是Eratosthenes筛法,它能够在一个特定范围内找到所有的质数。

该算法基于以下原理:首先,我们将从2开始,筛掉2的倍数,然后筛掉3的倍数,以此类推,直到我们无法筛去比当前数字小的数的倍数。此时剩下的数字就是所有的素数。

这个算法的时间复杂度为O(n*log(log(n))),其中n是范围的上限。

代码示例:

def eratosthenes(n: int) -> int:
    if n < 2:
        return 0

    # 初始化一个布尔数组表示是否为素数,初始值为True
    is_prime = [True] * (n+1)
    
    # 从2开始依次筛掉每个数的倍数
    for i in range(2, int(n**0.5)+1):
        if is_prime[i]:
            for j in range(i*i, n+1, i):
                is_prime[j] = False
    
    # 统计所有素数的和
    prime_sum = sum(i for i in range(2, n+1) if is_prime[i])
    
    return prime_sum
    
n = 100
print(f"The sum of all prime numbers within {n} is {eratosthenes(n)}")

输出:

The sum of all prime numbers within 100 is 1060