埃氏筛法,打印出筛选后的数组以及统计出筛选次数
时间: 2024-05-01 07:16:23 浏览: 87
艾氏筛法判别素数
4星 · 用户满意度95%
埃氏筛法是一种用来找出一定范围内所有素数的算法。它的原理是:先将数组中所有数初始化为素数,然后从小到大遍历数组,将每个素数的倍数都标记为合数,最后剩下的数即为素数。
以下是使用Python实现的埃氏筛法:
```python
def eratosthenesSieve(n):
prime = [True] * (n+1) # 初始化数组,全部标记为素数
prime[0] = prime[1] = False # 数字0和1不是素数,标记为合数
count = 0 # 统计筛选次数
for i in range(2, int(n**0.5)+1):
if prime[i]: # 如果i是素数,则将i的倍数标记为合数
for j in range(i*i, n+1, i):
prime[j] = False
count += 1
result = [i for i in range(n+1) if prime[i]] # 将素数存入结果数组中
return result, count
```
该函数接受一个整数n作为参数,返回两个值:一个包含所有素数的列表,以及执行筛选操作的次数。
下面是一个使用例子:
```python
primes, count = eratosthenesSieve(30)
print("Prime numbers:", primes)
print("Filter count:", count)
```
输出结果为:
```
Prime numbers: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
Filter count: 16
```
可以看到,筛选出了小于等于30的所有素数,并且执行了16次筛选操作。
阅读全文