素数筛是一种用于找出一定范围内所有素数的算法。最常见的素数筛算法是埃拉托斯特尼筛法(Sieve of Eratosthenes)。这个算法的基本思想是,从2开始,将每个素数的所有倍数标记为合数,剩下的未被标记的数就是素数。
以下是埃拉托斯特尼筛法的基本步骤:
- 创建一个布尔数组
is_prime[0..n],初始化所有元素为true。 - 将
is_prime[0]和is_prime[1]设置为false,因为0和1不是素数。 - 从2开始,对于每个数
p,如果is_prime[p]为true,则它是一个素数。 - 将
p的所有倍数(从p^2开始,因为小于p^2的p的倍数已经被之前的素数标记过了)标记为false。 - 重复步骤3和4,直到
p的平方大于n。
以下是埃拉托斯特尼筛法的 Python 代码实现:
def sieve_of_eratosthenes(n):
is_prime = [True] * (n + 1)
is_prime[0] = is_prime[1] = False
p = 2
while p * p <= n:
if is_prime[p]:
for i in range(p * p, n + 1, p):
is_prime[i] = False
p += 1
prime_numbers = [p for p in range(2, n + 1) if is_prime[p]]
return prime_numbers
# 示例:找出100以内的所有素数
print(sieve_of_eratosthenes(100))
除了埃拉托斯特尼筛法,还有其他一些素数筛算法,如欧拉筛法(Sieve of Euler)和 Sundaram筛法(Sieve of Sundaram)。这些算法在某些情况下可能更高效,但埃拉托斯特尼筛法是最基本且广泛使用的一种。
1053



被折叠的 条评论
为什么被折叠?



