埃拉托斯特尼筛算法用于求解一定范围内的所有素数。其时间复杂度是O(nloglogn)。以下是该算法的Python实现:
def sieve_of_erastothenes(n):
prime = [True for i in range(n+1)]
p = 2
while (p * p <= n):
if (prime[p] == True):
for i in range(p * p, n+1, p):
prime[i] = False
p += 1
primes = []
for p in range(2, n+1):
if prime[p]:
primes.append(p)
return primes
该算法首先创建一个长度为n+1的布尔数组,用于记录每个数字是不是素数。然后从2开始循环,如果当前数字是素数,将布尔数组中当前数字的倍数全部标记为非素数。最后返回素数列表。