示例#1
0
        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));
        }
示例#2
0
        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));
        }