11. Ejercicios resueltos

11.6. Numeros primos en un rango.

Consigna:

Utilizando el ciclo FOR, se pide escribir un script en Python que permita:
1) Ingresar al usuario un número entero al que llamaremos Z. Se debe validar que no exista error de tipo en Z y que Z sea entero positivo mayor que 1. En caso de que no cumpla estas condiciones se pide reingreso.
2) Luego, el script debe mostrar todos los números primos que existen entre [1, Z]
3) Al finalizar, deberá mostrar la cantidad de números primos que existen entre [1, Z]

Definición de Número Primo: Un número primo es un número natural mayor que 1
que tiene únicamente dos divisores positivos 2, él mismo y el 1.

Observación: Para el cálculo de número usamos el método de fuerza bruta (definición) es simple pero menos eficiente, mientras que el cribado de Eratóstenes es más rápido para determinar los números primos hasta un cierto límite. NO es propósito de la materia utilizar cribado de Eratóstene


Alternativa de solución 1:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Sat May 25 09:57:00 2024
@author: daniel
un número primo es un número natural mayor que 1
que tiene únicamente dos divisores positivos 2, él mismo y el 1.
""" # 1) Ingreso____________________________
valido=False
while not(valido): #Mientras no sea válido me quedo.
     try:
         Z=int(input("Ingrese: "))
         #continue <---- MAL!! abuso de continue
     except ValueError:
         print("Error de tipo.")
         #continue <---- MAL!! abuso de continue
     else:
         print("el tipo es correcto.. veamos si es mayor que 1...")
         if Z>1:
             valido=True #bien, Z es entero y mayor quye 1,salgo del while
         else:
             print("debe ingresar un valor mayor a 1...reingrese")
#2) Proceso__________________________________
cantidad_de_primos=0    
for i in range(2,Z+1):#rango de números [1,Z]
    contador=0
    for j in range(1,i+1):#para c/número [1,Z] veo si es primo.
        if i%j==0:
            contador+=1#cada vez que puedo dividir incremento
    if contador<=2:#i es primo, si solo 2 veces pude dividir 1 y i
        print(i," es primo.")
        cantidad_de_primos+=1 
#3) Salida____________________________________
print("La cantidad de primos es [1,{}]: {}".format(Z,cantidad_de_primos))

Alternativa de solución 2:


#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Sat May 25 09:57:00 2024
@author: daniel
un número primo es un número natural mayor que 1
que tiene únicamente dos divisores positivos 2, él mismo y el 1.
"""
# 1) Ingreso____________________________
while True:
     try:
         Z=int(input("Ingrese: "))
         #continue <---- MAL!! abuso de continue
     except ValueError:
         print("Error de tipo.")
         #continue <---- MAL!! abuso de continue
     else:
         print("el tipo es correcto.. veamos si es mayor que 1...")
         if Z>1:
             break #bien, Z es entero y mayor quye 1,salgo del while
         else:
             print("debe ingresar un valor mayor a 1...reingrese")
#2) Proceso__________________________________
cantidad_de_primos=0    
for i in range(2,Z+1):#rango de números [1,Z]
    contador=0
    for j in range(1,i+1):#para c/número [1,Z] veo si es primo.
        if i%j==0:
            contador+=1#cada vez que puedo dividir incremento
    if contador<=2:#i es primo, si solo 2 veces pude dividir 1 y i
        print(i," es primo.")
        cantidad_de_primos+=1
#3) Salida____________________________________
print("La cantidad de primos es [1,{}]: {}".format(Z,cantidad_de_primos))