📜  程序打印从1到N的质数。(1)

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

程序打印从1到N的质数

本程序使用Eratosthenes筛法来寻找从1到N的所有质数。Eratosthenes筛法是一种高效的算法,其思想是从2开始,将每个质数的倍数都标记为合数,直到所有数字都被筛选过。

代码实现
def primes(n):
    """
    打印从1到N的所有质数
    :param n: 质数最大范围
    """
    prime = [True] * (n + 1)
    p = 2
    while p * p <= n:
        if prime[p]:
            for i in range(p * 2, n + 1, p):
                prime[i] = False
        p += 1
    for p in range(2, n + 1):
        if prime[p]:
            print(p)
解释

本程序定义了一个primes函数,其中n为打印的最大范围。程序使用一个布尔数组来跟踪每个数字是否为质数。首先假设所有数字都是质数,然后从2开始往上遍历每个数字,如果该数字为质数,则将其所有倍数都标记为合数。这样,最终得到的布尔数组中,为True的数字即为素数,打印即可。

演示

我们以n=20为例进行演示,执行以下代码:

primes(20)

输出如下:

2
3
5
7
11
13
17
19

即从1到20的所有质数。