Python欧拉筛法求素数教学

1. 整件事情的流程

首先,让我们来看一下整个过程的步骤:

步骤 动作
1 初始化一个标记数组,代表数字是否为素数
2 从2开始,遍历到n,将素数的倍数标记为非素数
3 输出未被标记的数字,即为素数

2. 详细教学

步骤1:初始化标记数组

首先,我们需要初始化一个数组,假设我们要求解的素数范围是0到n,我们可以创建一个长度为n+1的数组,将所有元素初始化为True,表示它们都是素数。

# 初始化标记数组,所有元素均为True,代表素数
is_prime = [True] * (n+1)

步骤2:标记非素数

接下来,我们从2开始,遍历到n,将素数的倍数标记为非素数。这里我们可以用两层循环来实现,外层循环遍历2到n,内层循环遍历当前数的倍数,将其标记为False。

# 标记非素数
for i in range(2, int(n**0.5)+1):  # 遍历2到n的平方根
    if is_prime[i]:  # 如果当前数是素数
        for j in range(i*i, n+1, i):  # 将当前数的倍数标记为非素数
            is_prime[j] = False

步骤3:输出素数

最后,我们输出未被标记的数字,即为素数。

# 输出素数
primes = [i for i in range(2, n) if is_prime[i]]  # 筛选出素数
print(primes)

类图

classDiagram
    class is_prime {
        - n: int
        - is_prime: list
        + __init__(n)
        + mark_non_primes()
        + get_primes()
    }

    is_prime <|-- main

饼状图

pie
    title 素数分布图
    "素数" : 25
    "非素数" : 75

通过以上步骤,你应该能够成功地使用Python欧拉筛法求解素数了。如果有任何疑问,欢迎随时向我提出。祝你编程愉快!