Aprovecha el precio especial.

Antes:$249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

12d

22h

44m

53s

2

Cómo construir un programa para saber si un número es primo utilizando herramientas básicas de Python

Cómo construir un programa para saber si un número es primo utilizando herramientas básicas de Python.

Una de las cosas que mas me ha llamado la atención de la programación es la programación competitiva. La programación competitiva es un deporte mental en el que se resuelven problemas complejos a través de un código, un reto bastante popular que proponen en las primeras fases de las competencias, es encontrar números primos. Estos números han sido de gran interés para los matemáticos, debido a que se comportan de una forma hasta ahora imposible de calcular. No obstante, gracias a la computación, se pueden encontrar una gran cantidad de estos números tan particulares; de hecho hay códigos bastante sofisticados que han encontrado números primos de incluso 24.862.048 de cifras.

De acuerdo con lo anterior, les voy a presentar un programa bastante simple, el cual nos dice di un número es primo o no. Este algoritmo se construyó con los conocimientos básicos de Python, en el que solo se incluyen loops, listas, condicionales y operadores. Sin mas preámbulos, comencemos.

  1. En primer lugar, debemos escribir un input , el cual deja que el usuario ingrese los datos que pide el programa. Seguido de esto, se debe transformar la entrada a un número entero con la función int para que el dato ingresado se convierta en un número entero, ya que como sabemos, la función input toma las entradas como strings.
n = int(input('Indroduzca un número entero positivo mayor que 1 '))

  1. Luego, se crean dos listas vacías. La lista list_residuo almacenará los residuos del cociente entre el entero n y un elemento i, el cual tomará los valores desde 3 hasta n. Por otro lado, la lista zeros almacenará todos los residuos iguales a cero de la lista anterior. Esto lo veremos en el paso 3.
list_residuo = []
zeros = []

  1. Los condicionales: Esta es la sección que contiene toda la información del algoritmo.

3.1 El primer condicional: Si n = 2, automáticamente sabemos que el número 2 es primo por definición, e imprime 2 es un número primo.

ifn == 2:
  print(f'{n} es número primo')

3.2 Todos los números pares son divisibles por 2, por lo tanto si se ingresa un número par el programa automáticamente lo descarta. En esta línea, ponemos que si el residuo del cociente entre n y 2 es igual a cero, entonces, este es un número par, y como dijimos anteriormente no será un primo.

elif n%2 ==0: #para numeros pares
  print(f'{n} NO es número primo')

3.3 De acuerdo a lo anterior, solo nos queda analizar los números impares. Todos los números primos son impares, sin embargo, no se cumple que todos los números impares son primos. Para descartar los impares NO primos se realiza lo siguiente:

Creamos un ciclo for, el cual me va a servir para que el elemento i pueda recorrer los números del 3 al n+1 y encontrar el residuo de n/i para cada uno de estos.
Luego, en la lista list_residuo se irán adjuntando estos residuos. Se puede observar que en range() hay tres entradas. La ultima entrada (2) indica que el elemento i tomará saltos de a 2, es decir, i = 3, 5, 7 …, n, solo toma números impares ya que sabemos que un número impar no es divisible entre un par.

else: #para numeros impares. 
  for i inrange(3,n+1,2):
    residuo = n%i
    list_residuo.append(residuo)

3.4 Se crea otro ciclo for dentro del mismo else para adjuntar solos residuos iguales a cero de la lista anterior list_residuo. el elemento j recorre toda la lista list_residuo y si se encuentra con un zero, enconces lo adjunta a la lista vacía zeros mediante la función .append().

forj in list_residuo:
    ifj == 0:
      zeros.append(j) 

3.5 Sabemos que un número primo es divisible solo por 1 o por si mismo, si utilizamos esta definición podemos hacer la observación de que si tenemos un número n cuya lista zerossolo contiene un único cero, este cero corresponderá al residuo de n entre él mismo, (recordando que el for toma valores desde 3 hasta n y no desde 1). Basándonos en la idea anterior tenemos dos condiciones:

  • Si la lista zerossolo contiene un cero (el cual correspondiente al residuo de n entre el mismo), entonces, la longitud de la lista zeros será 1 y el número n será UN PRIMO.
  • Si por el contrario, la lista zeros tiene mas de un elemento, entonces, la longitud de la lista será mayor que 1 y daremos por hecho de que ese número es dividible por más números que por si mismo y por ende será un número NO PRIMO.
if len(zeros) > 1:
    print(f'{n} NO es número primo')
  else:
    print(f' ¡{n} Es un número primo!')

El código completo es el siguiente:

n = int(input('Indroduzca un número entero '))

list_residuo = []
zeros = []
ifn == 2:
  print(f'{n} es número primo')
elif n%2 ==0: #para numeros pares
  print(f'{n} NO es un número primo')
else: #para numeros impares. 
  for i inrange(3,n+1,2):
    residuo = n%i
    list_residuo.append(residuo)
  for j in list_residuo:
    if j == 0:
      zeros.append(j) 
  if len(zeros) > 1:
    print(f' {n} NO es número primo')
  else:
    print(f'¡{n} ES UN NÚMERO PRIMO!')

Como pudimos observar, es un código bastante simple en el que no se usaron funciones complejas, únicamente se implementó lo que se estudia en un curso de Fundamentos de programación, este caso en el lenguaje de Python. El próximo reto, es saber la cantidad de primos que hay entre un intervalo ¿cómo lo harías tú?

Hecho por: Sharon Navarro

Escribe tu comentario
+ 2