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