📜  计算数组中的素数(1)

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

计算数组中的素数

对给定数组中的数字进行素数筛选,即找出其中的素数并输出。

什么是素数?

素数,也叫质数,是指只能被 1 和本身整除的自然数。例如,2、3、5、7、11、13 等都是素数,而 4、6、8、9、10 等不是素数。

素数筛法

要找出给定的数字数组中的素数,我们采用素数筛法。素数筛法是指在一定范围内,不断排除已知的所有素数的倍数,直到不再存在后续的素数。具体的实现方式有很多,这里我们介绍较为简单的埃氏筛法。

埃氏筛法

埃氏筛法的基本思想是从第一个素数开始,不断地将其倍数标记成合数,直到遍历完给定范围内的所有数。具体步骤如下:

  1. 初始化一个长度为 n 的布尔类型数组 primes,其中 primes[i] 表示数 i 是否为素数,初始值为 true;
  2. 从 2 开始遍历到 sqrt(n):
    1. 若当前数 i 为素数,则将其所有的倍数 p(p>i)都标记为合数,即 primes[p] = false;
  3. 遍历结束后,所有值为 true 的下标即为素数。

实现埃氏筛法的代码如下所示:

def find_primes(n: int) -> List[int]:
    """
    埃氏筛法
    """
    primes = [True] * (n + 1)  # 初始化数组
    primes[0], primes[1] = False, False
    for i in range(2, int(n ** 0.5) + 1):  # 遍历到 sqrt(n)
        if primes[i]:
            for j in range(i*i, n+1, i):  # 将 i 的倍数标记为合数
                primes[j] = False
    return [i for i in range(n+1) if primes[i]]  # 返回所有的素数

该代码采用 Python 语言实现,返回一个列表,其中存储的即为素数。

总结

计算数组中的素数,可以采用素数筛法来实现。其中,埃氏筛法是较为简单易懂的一种实现方式。需要注意的是,对于大规模的数据筛选,可以采用更高效的算法实现。