Para este ejercicio vamos a montar un programa para calcular los números primos hasta el número que el usuario escoja. También se hará la suma de los números primos hasta n. Se desplegarán los resultados al final del programa.
Para entender mejor el proceso, se muestra el siguiente diagrama de flujo, realizado en lucidchart.
Para estructurar el programa, se hace el respectivo comentario explicando la función y los pasos del código.
'''
Para este desafío se debe calcular si n es primo o no.
Si n es primo, se debe calcular la lista de números primos hasta n.
Se debe mostrar la lista.
Luego se deben sumar todos estos números hasta n y mostrar el resultado.
'''
Luego se define una función is_prime(k)
donde se ejecuta un ciclo for
aplicando un módulo entre el elemento variable (i) y el parámetro k.
defis_prime(k):for i in range(2,k):
if (k%i) == 0:
returnFalsereturnTrue
Esta función retorna False
cuando el módulo da 0 en cualquiera de los elementos del rango definido en el ciclo for
. Si ningún elemento i%k
da cero, retorna True
, indicando que este número k
tiene más de un divisor, por lo que es compuesto.
Luego se definen las variables a utilizar.
suma = 0primos = []
n = int(input('ingrese número => '))
numbers = range(2,n)
Tener en cuenta que hay que definir la variable n
antes, porque se necesita tener claro el límite hasta donde se van a calcular los primos.
Se tiene un condicional para saber si, con ayuda de la función is_prime(n)
, ese número n
es compuesto o primo. Si al retornar hay un False
, se imprime que ese número es compuesto, como se aprecia a continuación:
ifnot is_prime(n):
print('Este número es compuesto')
Para seguir ejecutando la contraparte y saber si ese número fue primo, el programa sigue por el apartado del else:
else:
for p in numbers:
if is_prime(p):
primos.append(p)
suma += p
print('el número', n, 'es primo y la suma de todos los primos desde 2 hasta', n, 'es: ', int(suma+n))
primos.append(n)
print('la lista denúmeros es: ', primos)
En donde se tiene el plato fuerte, pues en este apartado del código, ya conociendo que ese número es primo, se procede a guardar los números primos anteriores a ese (n), al mismo tiempo que acumulándolos en la variable suma.
Se muestran también las instrucciones print()
porque se desea respetar la identación con el else:
de tal manera que desde que se calculan los primos anteriores, la suma y el despliegue de la información van todos dentro del mismo grupo de los números primos.
Nuestro código quedará de la siguiente manera:
'''
Para este desafío se debe calcular si n es primo o no.
Si n es primo, se debe calcular la lista denúmeros primos hasta n, mostrar la lista
Luego se deben sumar todos estos números hasta n y mostrar el resultado
'''
def is_prime(k):
for i inrange(2,k):
if (k%i) == 0:
return False
return True
suma = 0
primos = []
n = int(input('ingrese número => '))
numbers = range(2,n)
if not is_prime(n):
print('Este número es compuesto')
else:
for p in numbers:
if is_prime(p):
primos.append(p)
suma += p
print('el número', n, 'es primo y la suma de todos los primos desde 2 hasta', n, 'es: ', int(suma+n))
primos.append(n)
print('la lista denúmeros es: ', primos)
Realizando las pruebas, tenemos lo siguiente:
Ya probando un número compuesto, se tiene:
Ya para números más grandes, se tiene:
La función de is_prime(n)
se obtuvo de:
https://geekflare.com/es/prime-number-in-python/
Para más información: puede ver la documentación:
https://www.w3schools.com/python/python_while_loops.asp
https://www.w3schools.com/python/python_for_loops.asp
Se trató de usar la función de averiguar el número primo, de tal forma que se usaran solo los ciclos for. Pero fue imposible porque se tenía un indicador Boolean
de retorno. Al encontrar esta función se resumió mucho el código y se evitó usar muchos ciclos for
anidados, pues esto daba muchas fallas en el programa.
El código se montó y probó el Replit.