示例#1
0
        internal ModulusPoly multiply(ModulusPoly other)
        {
            if (!field.Equals(other.field))
            {
                throw new ArgumentException("ModulusPolys do not have same ModulusGF field");
            }
            if (isZero || other.isZero)
            {
                return(field.getZero());
            }
            int[] aCoefficients = this.coefficients;
            int   aLength       = aCoefficients.Length;

            int[] bCoefficients = other.coefficients;
            int   bLength       = bCoefficients.Length;

            int[] product = new int[aLength + bLength - 1];
            for (int i = 0; i < aLength; i++)
            {
                int aCoeff = aCoefficients[i];
                for (int j = 0; j < bLength; j++)
                {
                    product[i + j] = field.add(product[i + j], field.multiply(aCoeff, bCoefficients[j]));
                }
            }
            return(new ModulusPoly(field, product));
        }
示例#2
0
 public ModulusPoly(ModulusGF field, int[] coefficients)
 {
    if (coefficients.Length == 0)
    {
       throw new ArgumentException();
    }
    this.field = field;
    int coefficientsLength = coefficients.Length;
    if (coefficientsLength > 1 && coefficients[0] == 0)
    {
       // Leading term must be non-zero for anything except the constant polynomial "0"
       int firstNonZero = 1;
       while (firstNonZero < coefficientsLength && coefficients[firstNonZero] == 0)
       {
          firstNonZero++;
       }
       if (firstNonZero == coefficientsLength)
       {
          this.coefficients = field.getZero().coefficients;
       }
       else
       {
          this.coefficients = new int[coefficientsLength - firstNonZero];
          Array.Copy(coefficients,
              firstNonZero,
              this.coefficients,
              0,
              this.coefficients.Length);
       }
    }
    else
    {
       this.coefficients = coefficients;
    }
 }
示例#3
0
        public ModulusPoly(ModulusGF field, int[] coefficients)
        {
            if (coefficients.Length == 0)
            {
                throw new ArgumentException();
            }
            this.field = field;
            int coefficientsLength = coefficients.Length;

            if (coefficientsLength > 1 && coefficients[0] == 0)
            {
                // Leading term must be non-zero for anything except the constant polynomial "0"
                int firstNonZero = 1;
                while (firstNonZero < coefficientsLength && coefficients[firstNonZero] == 0)
                {
                    firstNonZero++;
                }
                if (firstNonZero == coefficientsLength)
                {
                    this.coefficients = field.getZero().coefficients;
                }
                else
                {
                    this.coefficients = new int[coefficientsLength - firstNonZero];
                    Array.Copy(coefficients,
                               firstNonZero,
                               this.coefficients,
                               0,
                               this.coefficients.Length);
                }
            }
            else
            {
                this.coefficients = coefficients;
            }
        }