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欧拉筛法求解素数了。如果有任何疑问,欢迎随时向我提出。祝你编程愉快!