48 lines
1.3 KiB
Ada
48 lines
1.3 KiB
Ada
with Ada.Text_IO, Generic_Root; use Generic_Root;
|
|
|
|
procedure Multiplicative_Root is
|
|
|
|
procedure Compute is new Compute_Root("*"); -- "*" for multiplicative roots
|
|
|
|
package TIO renames Ada.Text_IO;
|
|
package NIO is new TIO.Integer_IO(Number);
|
|
|
|
procedure Print_Numbers(Target_Root: Number; How_Many: Natural) is
|
|
Current: Number := 0;
|
|
Root, Pers: Number;
|
|
begin
|
|
for I in 1 .. How_Many loop
|
|
loop
|
|
Compute(Current, Root, Pers);
|
|
exit when Root = Target_Root;
|
|
Current := Current + 1;
|
|
end loop;
|
|
NIO.Put(Current, Width => 6);
|
|
if I < How_Many then
|
|
TIO.Put(",");
|
|
end if;
|
|
Current := Current + 1;
|
|
end loop;
|
|
end Print_Numbers;
|
|
|
|
Inputs: Number_Array := (123321, 7739, 893, 899998);
|
|
Root, Pers: Number;
|
|
begin
|
|
TIO.Put_Line(" Number MDR MP");
|
|
for I in Inputs'Range loop
|
|
Compute(Inputs(I), Root, Pers);
|
|
NIO.Put(Inputs(I), Width => 8);
|
|
NIO.Put(Root, Width => 6);
|
|
NIO.Put(Pers, Width => 6);
|
|
TIO.New_Line;
|
|
end loop;
|
|
TIO.New_Line;
|
|
|
|
TIO.Put_Line(" MDR first_five_numbers_with_that_MDR");
|
|
for I in 0 .. 9 loop
|
|
TIO.Put(" " & Integer'Image(I) & " ");
|
|
Print_Numbers(Target_Root => Number(I), How_Many => 5);
|
|
TIO.New_Line;
|
|
end loop;
|
|
end Multiplicative_Root;
|