Este script lo cogí de internet y modifiqué 2 lineas para hacer un trabajo, el script funciona correctamente y muestra los números primos que hay comprendidos entre el dos y el numero introducido por parámetro: ./primos de 50, sacaría todos los números primos comprendidos entre 2 y 50.
El problema es que no entiendo muy bien como actúa a la hora de calcular los números primos, si alguien pudiera ayudarme y explicarme que es lo que hace exactamente...
Código:
#!/bin/bash
# Script que calcula los numeros primos menores de uno pasado por parametro en la llamada.
# Este script testea cada numero candidato a ser primo
LIMITE="$1" #Numeros primos a partir de 2 y el parametro pasado $1
Primos() #Creo la funcion Primos
{
(( n = $1 + 1 )) # n es una lista de numeros que apunta a la siguiente direccion de memoria. Salto al siguiente entero.
shift # Guardo los numeros enteros menores al introducido en la lista, ejemplo si introduco 20 guardo los numeros menores que 21
#echo "_n=$n i=$i_"
if (( n == LIMITE )) #Cuando llego al limite, si n es igual al limite entonces, muestro todos los parametros.
then echo $* #Muestro todos los parametros
return
fi
for i; do # defino i como "@" para todos los valores previos de $n
#echo "-n=$n i=$i-"
(( i * i > n )) && break # Optimizacion: si i * i (factor*factor) es mayor que n salgo del bucle for. Es el caso base para la recursividad El caso que hace que el bucle infinito sea finito, es decir acabe.
(( n % i )) && continue # si no es mayor, desplazo fuera a los numeros no primos utlizando el operador modulo, ejemp: de 20%5 el resto0 por lo tanto primo, y 20%4 el resto es diferente de 0 por lo tanto no es un nomero primo.
Primos $n $@ # Recursividad en el interior del bucle. Vuelvo a llamar a la funcion primos y le paso el contenido de la lista normal y la lista de primos
return
done
Primos $n $@ $n # Recursividad fuera del bucle. Paso a primos la lista de numeros, la lista de primos y la lista de numeros
# Sucesivamente se acumulan los parámetros de posición.
# $@ "Es la lista de la acumulación de los números primos.
}
Primos 1
# Descomenta las lineas de echo para entender mejor lo que hace el algoritmo