--AUTOR: Jose Luis VILLARIG GARCIA (V2975813) 472542@cepsz.unizar.es --PROYECTO: Practicas de Intr. Programación 99/00. Práctica2-Ej.1.1.2 --FICHERO: Perfectos.adb --FECHA: Octubre-Noviembre 1999 --Modidicado por: --Fecha modificacion: --Descripcion: Este programa haya los cuatro primeros numeros perfectos --Antes de hacerlo, hice el programa que haya los divisores (divisores.adb) --El cuarto numero perfecto tarda algún tiempo. El quinto no se como se podria --sacar en un tiempo razonable. Agradecere cualquier sugerencia. with text_io, Ada.integer_text_io; use text_io, Ada.integer_text_io; procedure perfectos is sumaDivisores, i, cuentaPerfectos, n, mitadN: integer; begin sumaDivisores := 0; i := 1; cuentaPerfectos := 1; n :=2 ; while cuentaPerfectos <= 4 loop while n /= sumaDivisores loop n := n+1; sumaDivisores := 0; i := 1; mitadN := n/2; while (i <= mitadN) AND (sumaDivisores <= n) loop If (n mod i)=0 THEN sumaDivisores := sumaDivisores+i; End if; i := i+1; end loop; end loop; put(n,0); put(" "); cuentaPerfectos := cuentaPerfectos+1; n:=n+2; -- Los numeros perfectos son pares end loop; end perfectos;