Python: generar números primos en un rango especificado
Los números primos (prime number) son infinitos. Aparte de 1 y de sí mismos, no son divisibles por ningún otro divisor.
El siguiente ejemplo puede generar números primos dentro de un rango especificado:
Ejemplo (Python 3.0+)
Al ejecutar el programa anterior, el resultado de salida es:
$ python3 test.py 输入区间最小值: 1 输入区间最大值: 100 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
Usando el método de división de prueba
El método de división de prueba es un algoritmo básico que realiza pruebas de división en cada número para determinar si es primo. A continuación se muestra el código para generar números primos en un rango especificado usando el método de división de prueba:
Ejemplo
"""Determina si un número es primo"""
if n <= 1:
return False
if n <= 3:
return True
if n % 2 == 0 or n % 3 == 0:
return False
i = 5
while i * i <= n:
if n % i == 0 or n % (i + 2) == 0:
return False
i += 6
return True
def primes_in_range(start, end):
"""Genera números primos dentro de un rango especificado"""
for num in range(start, end + 1):
if is_prime(num):
print(num)
# Ejemplo: imprime los números primos en el rango de 10 a 50
primes_in_range(10, 50)
Usando la criba de Eratóstenes
La criba de Eratóstenes es un algoritmo más eficiente, especialmente adecuado para encontrar números primos en rangos grandes. A continuación se muestra el código para generar números primos en un rango especificado usando la criba de Eratóstenes:
Ejemplo
"""Usa la criba de Eratóstenes para encontrar todos los números primos hasta max_num"""
sieve = [True] * (max_num + 1)
sieve[0] = sieve[1] = False # 0 y 1 no son números primos
p = 2
while p * p <= max_num:
if sieve[p]:
for multiple in range(p * p, max_num + 1, p):
sieve[multiple] = False
p += 1
return [p for p, is_prime in enumerate(sieve) if is_prime]
def primes_in_range(start, end):
"""Genera números primos dentro de un rango especificado"""
primes = sieve_of_eratosthenes(end)
for num in primes:
if num >= start:
print(num)
# Ejemplo: imprime los números primos en el rango de 10 a 50
primes_in_range(10, 50)
Otras extensiones
Ejemplos de Python3