Python中如何更高效地找出一定范围内的所有质数?
时间: 2024-09-22 07:04:56 浏览: 27
Python 2种方法求某个范围内的所有素数(质数)
在Python中,寻找一定范围内的所有质数可以使用一些优化技巧提高效率。一种常见且高效的算法叫做“埃拉托斯特尼筛法”(Sieve of Eratosthenes)。下面是使用这种方法的一个示例:
```python
def sieve_of_eratosthenes(n):
primes = [True] * (n + 1) # 初始化一个布尔列表表示每个数是否是质数
primes[0] = primes[1] = False # 0和1不是质数
for i in range(2, int(n**0.5) + 1): # 需要遍历到√n,因为大于这个数的所有因子都已被处理过了
if primes[i]: # 如果i是质数
for j in range(i*i, n+1, i): # 将i的倍数标记为非质数
primes[j] = False
result = [i for i in range(n + 1) if primes[i]] # 把所有质数放入列表
return result
# 找出1到20内的所有质数
prime_range = sieve_of_eratosthenes(20)
print(prime_range) # 输出:[2, 3, 5, 7, 11, 13, 17, 19]
```
这个方法通过不断去除已知合数的因子,避免了冗余的检查,提高了查找效率。
阅读全文