public GaloisPolynomial Add(GaloisPolynomial summand) { if (!m_Field.Equals(summand.m_Field)) { throw new NFXException(StringConsts.ARGUMENT_ERROR + GetType().Name + ".Add(summand: different field)"); } if (IsPolynomial0) { return(summand); } if (summand.IsPolynomial0) { return(this); } int[] shorterPolynomialCoefficients; int[] longerPolynomialCoefficients; if (m_Coefficients.Length < summand.m_Coefficients.Length) { shorterPolynomialCoefficients = m_Coefficients; longerPolynomialCoefficients = summand.m_Coefficients; } else { shorterPolynomialCoefficients = summand.m_Coefficients; longerPolynomialCoefficients = m_Coefficients; } int[] resultCoefficients = new int[longerPolynomialCoefficients.Length]; int deltaLength = (int)(longerPolynomialCoefficients.Length - shorterPolynomialCoefficients.Length); for (int i = 0; i < longerPolynomialCoefficients.Length; i++) { if (i < deltaLength) { resultCoefficients[i] = longerPolynomialCoefficients[i]; } else { resultCoefficients[i] = GaloisField.Add(longerPolynomialCoefficients[i], shorterPolynomialCoefficients[i - deltaLength]); } } return(new GaloisPolynomial(m_Field, resultCoefficients)); }