📜  Eratosthenes筛(1)

📅  最后修改于: 2023-12-03 14:40:59.905000             🧑  作者: Mango

Eratosthenes筛

Eratosthenes

简介

Eratosthenes筛是一种用于产生小于或等于给定上限的所有质数的算法。该算法的名称来源于希腊数学家Eratosthenes,他在公元前3世纪发明了这个方法。

该筛选算法的基本思想是从2开始,依次找到当前最小的未被筛选的素数,并删除该素数的倍数。通过重复这个步骤,最终得到所有小于或等于给定上限的素数。

算法步骤

下面描述了Eratosthenes筛的算法步骤:

  1. 创建一个布尔数组isPrime,长度为上限。
  2. 将数组中所有元素初始化为true,表示所有数字都是素数。
  3. 设置isPrime[0]isPrime[1]false,因为0和1不是素数。
  4. 从2开始,遍历数组中的每个数字,直到达到给定上限的平方根(可证明所有大于该平方根的非素数已被删除)。
  5. 对于当前数字num,如果isPrime[num]true,则遍历num的所有倍数,并将它们标记为false
  6. 循环结束后,数组中仍为true的数字即为素数。
示例代码

下面是一个用Python实现Eratosthenes筛的示例代码:

def eratosthenes_sieve(limit):
    is_prime = [True] * (limit + 1)
    is_prime[0] = is_prime[1] = False

    for num in range(2, int(limit ** 0.5) + 1):
        if is_prime[num]:
            for multiple in range(num * num, limit + 1, num):
                is_prime[multiple] = False

    primes = [num for num, is_p in enumerate(is_prime) if is_p]
    return primes

此代码定义了一个名为eratosthenes_sieve的函数,该函数接受一个上限参数,并返回小于或等于该上限的所有素数的列表。

使用示例

通过调用eratosthenes_sieve函数,可以获取给定上限下的所有素数。例如:

limit = 100
primes = eratosthenes_sieve(limit)
print(primes)

输出:

[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]

上述代码找到了小于或等于100的所有素数并将其打印出来。

结论

Eratosthenes筛是一种高效的算法,用于生成小于或等于给定上限的所有素数。它的时间复杂度为O(n log(log n)),其中n是上限。使用该算法,程序员可以快速找到和处理素数。