📅  最后修改于: 2023-12-03 14:50:11.785000             🧑  作者: Mango
分段筛是一种在给定范围内高效找到素数的算法。通常用于在大范围内寻找素数。该算法将范围分割成多个较小的段,然后逐个段使用素数筛选法来找到素数。
isPrime
,其中 isPrime[i]
表示数字 i
是否为素数。isPrime
数组,将其中所有元素设为 true
。i
为素数,则将 isPrime[j]
设置为 false
,其中 j = i * 2, i * 3, i * 4, ...
。以下是使用 Python 编写的分段筛算法代码片段示例:
import math
def segmented_sieve(start, end):
limit = int(math.sqrt(end)) + 1
isPrime = [True] * limit
primes = []
for i in range(2, limit):
if isPrime[i]:
primes.append(i)
for j in range(i * i, limit, i):
isPrime[j] = False
for k in range(start, end + 1, limit):
isPrime = [True] * limit
for prime in primes:
# Find the start index within the current segment
start_idx = max(prime * prime, ((k + prime - 1) // prime) * prime)
# Mark multiples of prime as non-prime within the current segment
for j in range(start_idx, k + limit, prime):
isPrime[j - k] = False
for i in range(max(k, limit), min(k + limit, end + 1)):
if isPrime[i - k]:
primes.append(i)
return primes
以下是如何使用分段筛算法来打印在指定范围内的素数的示例代码。
start = 1
end = 100
primes = segmented_sieve(start, end)
print("Prime numbers in the range", start, "to", end, "are:")
for prime in primes:
print(prime)
以上是关于分段筛算法的介绍,该算法适用于在一定范围内高效找到素数。通过将范围分割成多个较小的段,并使用素数筛选法,可以快速地找到素数并输出结果。