Puede que les ayude esto, como base, ya que puede tener fallas y puede agilizarse:
// Buscar número "perfecto" inpar:
// Cuyos divisores (excepto él mismo), sumados, sean igual a él:
FinalizarPrograma = "No"
NumeroaProbar = -1;
Repetir:
NumeroaProbar = NumeroaProbar+2;
// Averiguar sus divisores:
CandidatoaDivisor = RedondearAbajo(NumeroaProbar/2)+1;
Divisores = 0;
Repetir:
CandidatoaDivisor--;
Si Resto de NumeroaProbar/CandidatoaDivisor == 0
Divisores++;
Agregar CandidatoaDivisor a una lista.
// Para eso debe haberse predefinido una, yo es que lo hago de otro modo.
mientras CandidatoaDivisor>2
Si la suma de sus divisores+1 == NumeroaProbar
Mostrar número
FinalizarPrograma = "Sí"
mientras FinalizarPrograma == "No"