93 lines
2.2 KiB
Ada
93 lines
2.2 KiB
Ada
with Ada.Text_Io;
|
|
use Ada.Text_Io;
|
|
|
|
with Ada.Numerics.Elementary_Functions;
|
|
use Ada.Numerics.Elementary_Functions;
|
|
|
|
procedure Nb_Premiers is
|
|
|
|
-- Variables parametres
|
|
subtype SIZE is Integer range 1..18;
|
|
|
|
|
|
-- Fonction de test de nb premiers
|
|
function Is_Prime(N : Long_Integer) return Boolean is
|
|
Prime : Boolean := True;
|
|
begin
|
|
if N mod Long_Integer(2) = 0 and N /= 2 then
|
|
Prime := False;
|
|
else
|
|
for I in 2..(Long_Integer(1.0+Sqrt(Float(N)))/2) loop
|
|
if N mod Long_Integer(2*I-1) = 0 then
|
|
Prime := False;
|
|
exit;
|
|
end if;
|
|
end loop;
|
|
end if;
|
|
return prime;
|
|
end Is_Prime;
|
|
|
|
-- Affichage nombre premier
|
|
procedure IP(N : Long_Integer) is
|
|
begin
|
|
if Is_Prime(N) then
|
|
Put_Line(Long_Integer'Image(N) & " premier");
|
|
else
|
|
Put_Line(Long_Integer'Image(N) & " n'est pas premier");
|
|
end if;
|
|
end IP;
|
|
|
|
-- Afficher les nb troncables d'une certaine taille
|
|
procedure Aff_Troncable(N : Long_Integer) is
|
|
--T_Min : constant Natural := 1; --Nombre de digits des nombres affichés
|
|
begin
|
|
Put_Line(Long_Integer'Image(N));
|
|
end Aff_Troncable;
|
|
|
|
|
|
-- Puissance de 10
|
|
function mode(M : Long_Integer) return Long_Integer is
|
|
I : Long_Integer := 0;
|
|
N : Long_Integer := M;
|
|
begin
|
|
while N >= 0 loop
|
|
N := N - 10**(Integer(I));
|
|
I := I + 1;
|
|
end loop;
|
|
return I;
|
|
end mode;
|
|
|
|
|
|
-- Recherche de nombres premiers tromcables
|
|
procedure Troncable(N : Long_Integer) is
|
|
N3 : Long_Integer := 0;
|
|
begin
|
|
if Is_Prime(N) then
|
|
Aff_Troncable(N);
|
|
if N < (Long_Integer'Last / 100) then
|
|
for I in 1..9 loop
|
|
N3 := 10;
|
|
for J in 1..(Mode(N) - 2) loop
|
|
N3 := N3 * 10;
|
|
end loop;
|
|
Troncable(N + Long_Integer(I)*N3);
|
|
end loop;
|
|
elsif N < (Long_Integer'Last / 11) then
|
|
for I in 1..8 loop
|
|
N3 := 10;
|
|
for J in 1..(Mode(N) - 2) loop
|
|
N3 := N3 * 10;
|
|
end loop;
|
|
Troncable(N + Long_Integer(I)*N3);
|
|
end loop;
|
|
end if;
|
|
end if;
|
|
end Troncable;
|
|
|
|
|
|
begin
|
|
Troncable(Long_Integer(2));
|
|
Troncable(Long_Integer(3));
|
|
Troncable(Long_Integer(5));
|
|
Troncable(Long_Integer(7));
|
|
end Nb_Premiers;
|