📅  最后修改于: 2023-12-03 15:06:52.355000             🧑  作者: Mango
介绍:
在计算机科学领域中,找到一组数中所有素数的算法非常有用。其中一种著名的算法是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