📅  最后修改于: 2023-12-03 14:40:59.905000             🧑  作者: Mango
Eratosthenes筛是一种用于产生小于或等于给定上限的所有质数的算法。该算法的名称来源于希腊数学家Eratosthenes,他在公元前3世纪发明了这个方法。
该筛选算法的基本思想是从2开始,依次找到当前最小的未被筛选的素数,并删除该素数的倍数。通过重复这个步骤,最终得到所有小于或等于给定上限的素数。
下面描述了Eratosthenes筛的算法步骤:
isPrime
,长度为上限。true
,表示所有数字都是素数。isPrime[0]
和isPrime[1]
为false
,因为0和1不是素数。num
,如果isPrime[num]
为true
,则遍历num
的所有倍数,并将它们标记为false
。true
的数字即为素数。下面是一个用Python实现Eratosthenes筛的示例代码:
def eratosthenes_sieve(limit):
is_prime = [True] * (limit + 1)
is_prime[0] = is_prime[1] = False
for num in range(2, int(limit ** 0.5) + 1):
if is_prime[num]:
for multiple in range(num * num, limit + 1, num):
is_prime[multiple] = False
primes = [num for num, is_p in enumerate(is_prime) if is_p]
return primes
此代码定义了一个名为eratosthenes_sieve
的函数,该函数接受一个上限参数,并返回小于或等于该上限的所有素数的列表。
通过调用eratosthenes_sieve
函数,可以获取给定上限下的所有素数。例如:
limit = 100
primes = eratosthenes_sieve(limit)
print(primes)
输出:
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
上述代码找到了小于或等于100的所有素数并将其打印出来。
Eratosthenes筛是一种高效的算法,用于生成小于或等于给定上限的所有素数。它的时间复杂度为O(n log(log n)),其中n是上限。使用该算法,程序员可以快速找到和处理素数。