def sieve_of_eratosthenes(limit):
# 创建一个布尔数组,初始时假设所有数都是素数
is_prime = [True] * (limit + 1)
is_prime[0] = is_prime[1] = False # 0 和 1 不是素数
p = 2
while p * p <= limit:
if is_prime[p]:
# 将 p 的所有倍数标记为非素数
for i in range(p * p, limit + 1, p):
is_prime[i] = False
p += 1
# 收集所有素数
primes = [num for num in range(2, limit + 1) if is_prime[num]]
return primes
# 求 2 到 2000 之间的所有素数
primes = sieve_of_eratosthenes(2000)
print(primes)
这个代码的工作原理如下:
- 创建一个布尔数组
is_prime,初始时假设所有数都是素数。 - 将 0 和 1 标记为非素数。
- 从 2 开始,将每个素数的倍数标记为非素数。
- 最后,收集并返回所有标记为素数的数。