public FiniteFieldPolynomial(IrreduciblePolynomial primePolynomial, params int[] setCoefficients) {
            _PrimePolynomial = primePolynomial;

            _PolynomialSetCoefficients = BigInteger.Zero;
            for (int i = 0; i < setCoefficients.Length; i++) {
                _PolynomialSetCoefficients = _PolynomialSetCoefficients.SetBit(setCoefficients[i]);
            }
        }
        public IrreduciblePolynomial(int degreeOfIrreduciblePolynomial) {
            if (!IsValidDegree(degreeOfIrreduciblePolynomial)) {
                throw new ArgumentException();
            }

            PolynomialValue = BigInteger.Zero.SetBit(degreeOfIrreduciblePolynomial);

            for (int i = 0; i < InnerTermsPerPolynomial; i++) {
                PolynomialValue =
                    PolynomialValue.SetBit(
                        _TermPowers[InnerTermsPerPolynomial*((degreeOfIrreduciblePolynomial/8) - 1) + i]);
            }

            PolynomialValue = PolynomialValue.SetBit(0);
            Degree = degreeOfIrreduciblePolynomial;
        }