--------------------------------------------------------------------------- -- Mod f(x) division. Euclidean Algorithm --------------------------------------------------------------------------- with Gnat.Io; use Gnat.Io; with Galois; use Galois; procedure algorithm6 is F, G, H, A, B, C, D, Q, R, next_D, Z, Y: Polynomial; begin for I in 0 .. M loop G(I) := 0; H(I) := 0; F(I) := 0; end loop; --F(0) := 237; F(17) := 1; --f(0) := 1; f(17) := 1; --G(1) := 1; G(5) := 47; G(9) := 230; G(15) := 117; --h(3) := 120; --F(0) := 237; F(7) := 29; F(14) := 42; F(17) := 1; --H(3) := 211; H(9) := 123; H(11) := 7; H(15) := 189; F(5) := 1; F(4) := 2; F(3) := 2; F(2) := 4; F(1) := 6; F(0) := 2; G(0) := 0; G(1) := 1; G(2) := 2; G(3) := 3; G(4) := 4; for I4 in 0 .. 6 loop for I3 in 0 .. 6 loop for I2 in 0 .. 6 loop for I1 in 0 .. 6 loop for I0 in 0 .. 6 loop H(4) := I4; H(3) := I3; H(2) := I2; H(1) := I1; H(0) := I0; ---------------------------------------------------------------------------- A := F; B := H; for I in 0 .. M loop C(I) := 0; end loop; D := G; while Degree(B) > 0 loop Q := Quotient(A, B); R := Remainder(A, B); Next_D := Subtract(C, Product_mod_f(D, Q, f)); A := B; B := R; C := D; D := Next_D; end loop; Z := Product(D, Invert(B(0))); ----------------------------------------------------------------------------- Y := Product_Mod_F(Z, H, F); Put("z = "); for I in 0 .. M loop Put(Z(I)); Put(" "); end loop; New_Line; Put("z.h = "); for I in 0 .. M loop Put(Y(I)); Put(" "); end loop; New_Line; if Y /=(0,1,2,3,4,0) then Put("ERROR"); end if; New_Line; end loop; end loop; end loop; end loop; end loop; end algorithm6;