使用筛选法求解小于n的所有素数。
时间: 2024-09-06 21:01:06 浏览: 47
用筛选取法求出~之间的所有素数。-c++语言教程谭浩强
筛选法求解小于n的所有素数,是一种经典的算法,通常被称为埃拉托斯特尼筛法(Sieve of Eratosthenes)。该方法的原理是通过不断筛选出合数,最终留下的是所有素数。具体步骤如下:
1. 首先创建一个布尔数组bool[0...n-1],并将所有元素初始化为true,表示我们认为所有数都是素数候选。
2. 从第一个素数2开始,将它的所有倍数标记为非素数(即将对应位置的布尔值设为false),因为除了1和它本身以外的其他数都不可能是素数。
3. 找到下一个标记为true的数,这个数一定是素数,然后重复步骤2,将其所有倍数标记为非素数。
4. 重复上述过程,直到达到或超过√n为止。这时数组中仍然标记为true的索引对应的数都是素数。
下面是使用筛选法求解小于n的所有素数的一个例子:
```python
def sieve_of_eratosthenes(n):
prime = [True for i in range(n)]
p = 2
while p * p <= n:
# 如果prime[p]没有被改变,那么它是一个素数
if prime[p]:
# 更新所有p的倍数为非素数
for i in range(p * p, n, p):
prime[i] = False
p += 1
# 打印所有素数
for p in range(2, n):
if prime[p]:
print(p, end=" ")
print()
# 示例:打印小于30的所有素数
sieve_of_eratosthenes(30)
```
使用这个函数,我们可以输出小于30的所有素数:2, 3, 5, 7, 11, 13, 17, 19, 23, 29。
阅读全文