Primos() ' Matriz de alojamiento de los primos hallados
Primos(0 to 999) ' Redimensionar la matriz cada 1000 hallados, la matriz es dinámica y acabamos de darle 1000 elementos
NPrimos ' contiene números primos hallados, aunque la matriz tenga 1000 elementos nPrimos indica cuantos elementos realmente están ocupados
BuscarnumerosPerfectos(Cuantos) no devuelve nada
Primos(0)=1
Primos(1)=2
NPrimos =2
iniciar bucle BuscarPerfectos 2, cuantos
candidato= (2^BuscarPerfectos ) -1
si EsPrimoBuscarEnMatriz(candidato)=true luego
NumPerfecto= (2^ (BuscarPerfectos -1)) * candidato
print NumPerfecto,
fin si
fin Bucle
fin BuscarnumerosPerfectos
EsPrimoBuscarEnMatriz(Candidato) tipo buleano
PrimoMayorEnMatriz = matriz( NPrimos-1)
hacer mientras PrimoMayorEnMatriz < candidato
llamar a la función BuscarPrimos(LimiteMayorActualDeLaMatriz, int(SQR(candidato)))
PrimoMayorEnMatriz = matriz( NPrimos-1)
repetir
iniciar bucle LocalizarPrimoEnMatriz 2, LimiteMayorActualDeLaMatriz
si candidato= primos(LocalizarPrimoEnMatriz) luego
devolver EsPrimoBuscarEnMatriz=true
salir de la función
fin si
fin bucle
' si llega aquí devolver false
fin función EsPrimoBuscarEnMatriz
BuscarPrimos(desde, hasta)
si desde es par, le añadimos 1, porque excepto el 2 el resto de primos es impar.
iniciar bucle Recorrido desde, hasta en pasos de 2
n=Recorrido
EsPrimo = true '
' buscar divisores, un búmero no es primos si tiene divisores diferentes de 1 y sí mismo
iniciar bucle CalcularSiNEsPrimo: 2, int(sqr(n))
si n mod CalcularSiNEsPrimo = 0 es divisor luego EsPrimo=false, salir del bucle
siguiente en el bucle
si EsPrimo = true luego meterlo en la matriz
nPrimos= nPrimos +1
Primos(nPrimos)= n
fin si
si matriz esta llena redimensionamos conservando contenido, en otros 1000 elementos más
fin bucle recorrido
fin función BuscarPrimos