code: public void solveVandermondeSystem(int[] x, int[] y, int len) {
      assert(x.length <= len && y.length <= len);
      for (int i = 0; i < len - 1; i++) {
        for (int j = len - 1; j > i; j--) {
          y[j] = y[j] ^ mulTable[x[i]][y[j - 1]];
        }
      }
      for (int i = len - 1; i >= 0; i--) {
        for (int j = i + 1; j < len; j++) {
          y[j] = divTable[y[j]][x[j] ^ x[j - i - 1]];
        }
        for (int j = i; j < len - 1; j++) {
          y[j] = y[j] ^ y[j + 1];
        }
      }
    }
docs: Given a Vandermonde matrix V[i][j]=x[j]^i and vector y, solve for z such
  that Vz=y. The output z will be placed in y.
  @param x the vector which describe the Vandermonde matrix
  @param y right-hand side of the Vandermonde system equation.
  will be replaced the output in this vector
  @param len consider x and y only from 0...len-1