--AUTOR: Jose Luis VILLARIG GARCIA (V2975813) 472542@cepsz.unizar.es --PROYECTO: Practicas de Intr. Programación 99/00. Ejercicio --FICHERO: Perfectos2.adb --FECHA: Octubre-Noviembre 1999 --Modidicado por: --Fecha modificacion: --Descripcion: Este programa calcula los cinco primeros numeros perfectos --(el sexto es mayor que integer'LAST utilizando la formula de Euclides: --Euclides probo que si (2 ** n - 1) es primo, entonces --(2 ** n - 1) * (2 ** (n - 1)) es perfecto. Euler en 1747 demostro que todos --los numeros perfectos pares son de esta forma. No se sabe si hay algun --numero perfecto impar. with text_IO, Ada.Integer_Text_IO, Ada.Numerics.Elementary_Functions; use text_IO, Ada.Integer_Text_IO, Ada.Numerics.Elementary_Functions; procedure perfectos2 is n, i : integer; function esPrimo (n : in integer) return boolean is esPrimo : boolean := TRUE; begin for i in 2..integer(sqrt(float(n))) loop if n mod i = 0 then esPrimo := FALSE; end if; end loop; return esPrimo; end esPrimo; begin n := 2; i := 0; while i < 5 loop if esPrimo (2 ** n - 1) then put ((2 ** n - 1) * (2 ** (n - 1)),0); put (" "); i := i + 1; end if; n := n + 1; end loop; end perfectos2;