✨ 本期带你掌握一个古老但高效的算法 —— 埃拉托色尼筛法(Sieve of Eratosthenes)。
埃拉托斯特尼筛法,简称埃氏筛或爱氏筛,是一种由希腊数学家埃拉托斯特尼所提出的一种简单检定素数的算法。要得到自然数n以内的全部素数,必须把不大于根号n的所有素数的倍数剔除,剩下的就是素数。
给定一个正整数 n
,请找出所有小于等于 n
的素数(质数)。
输入: n = 30
输出: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
埃氏筛法的思想非常巧妙:
2
开始,标记其倍数为“非素数”;n
;def sieve(n):
is_prime = [True] * (n + 1)
is_prime[0] = is_prime[1] = False
for i in range(2, int(n ** 0.5) + 1):
if is_prime[i]:
for j in range(i * i, n + 1, i):
is_prime[j] = False
return [i for i, val in enumerate(is_prime) if val]
print(sieve(30))
# 输出:[2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
步骤 | 说明 |
---|---|
初始化布尔数组 | 默认所有数为素数 |
从 2 开始 | 把每个素数的倍数全部剔除 |
筛到 √n 即可 | 因为更大的数其倍数已被处理 |
✅ 时间复杂度约为 O(n log log n),空间复杂度 O(n)
埃氏筛法以“标记去除”的思路高效而优雅,是入门数论算法的经典之选!
点个赞 + 收藏 ,素数永远浪漫,算法永远年轻!