Rango de números primos con Python
Un número primo básicamente es aquel número que solo tiene dos divisores, el 1 y él mismo; por ejemplo, el número 17 es primo ya que solo se puede dividir por 1 y por 17. Este programa escrito en Python toma un rango de “n” cantidad de números y muestra en pantalla solo los que son primos.
Código fuente
El código fuente ocupa un total de 15 líneas.
#!/usr/bin/env python cont = 0 numero = int(input("Ingrese un numero a evaluar: ")) for n in range(1, numero + 1): for d in range(1, n + 1): if n % d == 0: cont += 1 if cont == 2: print("{}".format(n), end=" ") cont = 0 print("Fin")
La línea
Variable contador
Necesitamos una variable que se encargue de acumular el número de divisores de cada número del rango.
cont = 0
La variable cont jugará el papel de contador en el programa, la creamos e inicializamos con un valor de 0; pero para que un número sea considerado como primo, dicha variable debe valer 2.
Solicitando y leyendo numero ingresado por el usuario
El programa debe solicitar al usuario que ingrese un número, que a su vez representa el rango de números a evaluar por el programa; por ejemplo, desde 1 hasta 10.
numero = int(input("Ingrese un numero a evaluar: "))
Le mostramos un mensaje al usuario solicitando que ingrese un número y leemos el dato ingresado con la función input(), luego convertimos dicho dato a tipo entero usando la función int() y lo asignamos a la variable numero.
Procesando la información
Se requieren 2 bucles for y 2 sentencias if para procesar la información, como se muestra en este fragmento de código.
for n in range(1, numero + 1): for d in range(1, n + 1): if n % d == 0: cont += 1 if cont == 2: print("{}".format(n), end=" ") cont = 0
El bucle for externo va a iterar sobre un rango que va desde 1 hasta el valor ingresado por el usuario en la variable numero + 1 usando la función range() ya que los rangos en Python excluyen el último valor, cada número del rango se asigna a la variable n. El bucle for interno va a iterar sobre un rango que va desde 1 hasta el valor de n + 1 y asigna cada valor a la variable d, el proceso de tomar los rangos hasta n mejora el rendimiento del programa ya que solo se itera sobre el rango necesario para comprobar si un número es divisible por 1 y por él mismo; por ejemplo, si la variable numero vale 30 y n vale 15, el bucle for solo va a iterar hasta 15 y no hasta 30.
La primera sentencia if verifica si la expresión n % d es igual a 0, de ser así, entonces incrementa la variable cont en +1. El segundo if evalúa si la variable cont es igual a 2 e imprime en pantalla el valor de n, que es un número primo y para evitar que el programa de salto de línea usamos el parámetro end=” “; por último reiniciamos la variable cont a 0 para contar la cantidad de divisores que tiene el siguiente valor del rango.
Fin!!
print("Fin!!")
Por último imprimimos la palabra “Fin!!”, esto es solo un adorno del programa.
Ejecutando el programa
Ejecutamos el programa para probar que funciona correctamente.
[fixedtorres@linuxero]$ python NumerosPrimosRango.py Ingrese un numero a evaluar: 50 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 Fin!! [fixedtorres@linuxero]$
Al ingresar el número 50 nos muestra los números primos que hay desde 1 hasta 50.
Muy interesante!
Yo escribí el siguiente código para lograr el mismo cometido:
# Calculadora de números primos
print(‘\n########## CALCULADORA DE NÚMEROS PRIMOS ##########’)
lim_inf = int(input(‘\nPor favor introduzca el límite inferior del rango de cálculo de números primos: ‘))
lim_sup = int(input(‘Por favor introduzca el límite superior del rango de cálculo de números primos: ‘))
while lim_inf >= lim_sup or lim_inf < 0 or lim_inf Error. Usted introdujo un rango incorrecto.’)
lim_inf = int(input(‘\nPor favor introduzca el límite inferior del rango de cálculo de números primos: ‘))
lim_sup = int(input(‘Por favor introduzca el límite superior del rango de cálculo de números primos: ‘))
aux = []
primos = []
for i in range(lim_inf, lim_sup + 1):
for j in range(2, i):
if i % j == 0:
aux.append(i)
for k in range(lim_inf, lim_sup + 1):
if k not in aux:
primos.append(k)
print(f’\n ——> Los números primos entre {lim_inf} y {lim_sup} son = {primos}’)