素数的求法25种 用python写出来
时间: 2024-10-28 17:07:11 浏览: 6
素数是指只有1和它本身两个正因数的自然数。在Python中,可以使用多种方法来找出一定范围内的素数。这里列举五种常见的方法:
1. **暴力判断法**:
```python
def is_prime(n):
if n <= 1:
return False
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
return False
return True
# 使用列表推导式找出所有小于某个数n的素数
primes = [i for i in range(2, 26) if is_prime(i)]
```
2. **埃拉托斯特尼筛法**:
```python
def sieve_of_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]:
for j in range(i*i, n+1, i):
primes[j] = False
return [i for i in range(2, n) if primes[i]]
primes_sieve = sieve_of_eratosthenes(25)
```
3. **质数生成器**(使用迭代器):
```python
def prime_generator(n):
def _is_prime(num):
if num < 2:
return False
for i in range(2, int(num**0.5) + 1):
if num % i == 0:
return False
return True
num = 2
while num < n:
if _is_prime(num):
yield num
num += 1
primes_generator = list(prime_generator(25))
```
4. **Sundaram序列**(适用于特定范围内查找):
```python
def sundaram_primes(n):
limit = (n*sqrt(2*n)) // 2 + 1
primes = []
for m in range(1, limit):
p = m*(m+1)*(2*m+1) // 6 + 1
if p <= n and is_prime(p):
primes.append(p)
return primes
sundaram_primes_25 = sundaram_primes(25)
```
5. **Miller-Rabin素性测试**(更高效但复杂些):
```python
from random import randint
def miller_rabin(n, k=5): # 使用多次随机测试提高准确率
# ... (此处省略 Miller-Rabin 算法实现)
primes_miller = [i for i in range(2, 26) if is_prime_with_miller_rabin(i)]
# 实现 Miller-Rabin 函数需要一些数学知识,这里简化了部分细节
```
以上展示了几种常见的素数寻找方法,你可以根据需求选择适合的方法。
阅读全文