Question: How to check that an n*n matrix is an MDS matrx when n>=16

An n*n matrix A is called an MDS matrix over an arbitrary field if all determinant of square sub-matrices of A are non-zero over the field. It is not difficult to prove that the number of all square sub-matrices of A is binomial(2*n, n)-1. The code that I use to check whether A is an MDS matrix is in the following form 

 u := 1;
 for k to n do
 P := choose(n, k);
   for i to nops(P) do
    for j to nops(P) do
         F := A(P[i], P[j]);
         r := Determinant(F);
        if r = 0 then

           u := 0; k:=n+1;

            i := nops(P)+1; j := nops(P)+1;

        end if;

    end do;

      end do; 
   if u = 1 then

      print(A is an MDS Matrix) 

   end if; 
  end do:

When I run the mentioned code for n=16, it takes long time since we need to check binomial(32, 16)-1=601080389 cases to verify that A is an MDS matrix or not. 

My Question: Is there a modified procedure which can be used to check that an n*n matrix is  whether an MDS matrix for n>=16. 


 

Please Wait...