public GaloisPolynomial Multiply(GaloisPolynomial factorPolynomial) { if (!m_Field.Equals(factorPolynomial.m_Field)) { throw new NFXException(StringConsts.ARGUMENT_ERROR + GetType().Name + ".Mult(factor: different field)"); } if (IsPolynomial0 || factorPolynomial.IsPolynomial0) { return(m_Field.Polynomial0); } int[] multiplicand = m_Coefficients; int[] factor = factorPolynomial.m_Coefficients; int[] product = new int[m_Coefficients.Length + factorPolynomial.m_Coefficients.Length - 1]; for (int i = 0; i < multiplicand.Length; i++) { int multiplicandCoefficient = multiplicand[i]; for (int j = 0; j < factor.Length; j++) { product[i + j] = GaloisField.Add(product[i + j], m_Field.Multiply(multiplicandCoefficient, factor[j])); } } return(new GaloisPolynomial(m_Field, product)); }