使用筛选法求解少于n的所有素数
时间: 2024-10-25 22:05:22 浏览: 30
使用筛选法,如埃拉托斯特尼筛法(Sieve of Eratosthenes),是一种常见的寻找小于给定数值n的所有质数的有效算法。基本步骤如下:
1. 创建一个长度为n的布尔数组isPrime,初始时假定所有数字都是质数(标记为True)。
2. 从最小的质数2开始,遍历这个数组。对于每个质数p,将其所有的倍数标记为合数(isPrime[p * i]设置为False,其中i从2到n/p)。
3. 继续寻找下一个未标记为合数的数字,它就是下一个质数。这个过程会一直持续到 sqrt(n),因为大于sqrt(n)的因数一定有一个对应的小于sqrt(n)的因数已经在前面处理过了。
4. 遍历结束后,数组isPrime中剩下的True值对应的索引即为小于n的所有质数。
下面是Python的实现示例:
```python
def sieve_of_eratosthenes(n):
primes = [True] * (n+1)
p = 2
while p*p <= n:
if primes[p]: # 如果p是质数
for i in range(p*p, n+1, p): # 标记其倍数为合数
primes[i] = False
p += 1
return [i for i in range(2, n) if primes[i]]
# 获取小于某个数n的所有质数
all_primes_under_n = sieve_of_eratosthenes(100) # 示例:找出小于100的所有质数
```
阅读全文