埃氏筛法与欧拉筛python
时间: 2023-10-16 16:25:15 浏览: 57
埃氏筛法:
```python
def Eratosthenes(n):
primes = [True] * (n + 1)
primes[0], primes[1] = False, False
for i in range(2, int(n ** 0.5) + 1):
if primes[i]:
primes[i * i: n + 1: i] = [False] * len(primes[i * i: n + 1: i])
return [i for i in range(n + 1) if primes[i]]
```
欧拉筛:
```python
def Euler(n):
primes = []
is_prime = [True] * (n + 1)
for i in range(2, n+1):
if is_prime[i]:
primes.append(i)
for p in primes:
if i * p > n:
break
is_prime[i * p] = False
if i % p == 0:
break
return primes
```
两者的时间复杂度都是 $O(n \log \log n)$,但在常数上欧拉筛比埃氏筛法小,因此欧拉筛法更快。
相关问题
埃氏筛和欧拉筛python
埃氏筛和欧拉筛都是用来求质数的算法,下面分别介绍它们的python实现。
埃氏筛:
```python
def eratosthenes_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
primes = []
for i in range(2, n + 1):
if is_prime[i]:
primes.append(i)
return primes
```
欧拉筛:
```python
def euler_sieve(n):
is_prime = [True] * (n + 1)
primes = []
for i in range(2, n + 1):
if is_prime[i]:
primes.append(i)
for j in range(len(primes)):
if i * primes[j] > n:
break
is_prime[i * primes[j]] = False
if i % primes[j] == 0:
break
return primes
```
两者的区别在于,埃氏筛每次找到一个质数后,将它的倍数都标记为合数。而欧拉筛则是在每个质数的倍数中,只标记一次,避免了重复标记,从而提高了效率。
python 求素数
Python可以使用多种方法来求素数,其中包括穷举法、埃氏筛法、欧拉筛法等。以下是其中一种方法的实现代码:
num = [] # 定义一个空列表用来接收找到的符合条件的数字
for i in range(2, 101):
k = 0
for j in range(1, i+1):
if i % j == 0:
k += 1
if k == 2:
num.append(i)
print(num)
这段代码使用了穷举法,即对于每个数字,循环判断它是否为素数。具体来说,对于每个数字i,循环判断它能否被1和它本身以外的数字整除,如果能,则k加1。最后,如果k等于2,说明该数字只能被1和它本身整除,即为素数,将其加入列表中。最终输出列表中的所有素数。
相关推荐
![pptx](https://img-home.csdnimg.cn/images/20210720083543.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)