/// <summary>
        /// Squares this GF2nPolynomialElement using GF2nField's squaring matrix.
        /// <para>This is supposed to be fast when using a polynomial (no tri- or pentanomial) as fieldpolynomial.
        /// Use SquarePreCalc when using a tri- or pentanomial as fieldpolynomial instead.</para>
        /// </summary>
        ///
        /// <returns>Returns <c>this^2</c> (newly created)</returns>
        public GF2nPolynomialElement SquareMatrix()
        {
            GF2nPolynomialElement result = new GF2nPolynomialElement(this);

            result.SquareThisMatrix();
            result.ReduceThis();
            return(result);
        }
        /// <summary>
        /// Squares this GF2nPolynomialElement by shifting left its Bitstring and reducing.
        /// <para>This is supposed to be the slowest method. Use SquarePreCalc or SquareMatrix instead.</para>
        /// </summary>
        ///
        /// <returns></returns>
        public GF2nPolynomialElement SquareBitwise()
        {
            GF2nPolynomialElement result = new GF2nPolynomialElement(this);

            result.SquareThisBitwise();
            result.ReduceThis();
            return(result);
        }
        /// <summary>
        /// Squares this GF2nPolynomialElement by using precalculated values and reducing.
        /// <para>This is supposed to de fastest when using a trinomial or pentanomial as field polynomial.
        /// Use SquareMatrix when using a ordinary polynomial as field polynomial.</para>
        /// </summary>
        ///
        /// <returns></returns>
        public GF2nPolynomialElement SquarePreCalc()
        {
            GF2nPolynomialElement result = new GF2nPolynomialElement(this);

            result.SquareThisPreCalc();
            result.ReduceThis();

            return(result);
        }
        /// <summary>
        /// Squares this GF2nPolynomialElement by using precalculated values and reducing.
        /// <para>This is supposed to de fastest when using a trinomial or pentanomial as field polynomial.
        /// Use SquareMatrix when using a ordinary polynomial as field polynomial.</para>
        /// </summary>
        /// 
        /// <returns></returns>
        public GF2nPolynomialElement SquarePreCalc()
        {
            GF2nPolynomialElement result = new GF2nPolynomialElement(this);
            result.SquareThisPreCalc();
            result.ReduceThis();

            return result;
        }
 /// <summary>
 /// Squares this GF2nPolynomialElement using GF2nField's squaring matrix.
 /// <para>This is supposed to be fast when using a polynomial (no tri- or pentanomial) as fieldpolynomial.
 /// Use SquarePreCalc when using a tri- or pentanomial as fieldpolynomial instead.</para>
 /// </summary>
 /// 
 /// <returns>Returns <c>this^2</c> (newly created)</returns>
 public GF2nPolynomialElement SquareMatrix()
 {
     GF2nPolynomialElement result = new GF2nPolynomialElement(this);
     result.SquareThisMatrix();
     result.ReduceThis();
     return result;
 }
 /// <summary>
 /// Squares this GF2nPolynomialElement by shifting left its Bitstring and reducing.
 /// <para>This is supposed to be the slowest method. Use SquarePreCalc or SquareMatrix instead.</para>
 /// </summary>
 /// 
 /// <returns></returns>
 public GF2nPolynomialElement SquareBitwise()
 {
     GF2nPolynomialElement result = new GF2nPolynomialElement(this);
     result.SquareThisBitwise();
     result.ReduceThis();
     return result;
 }