public static bool IsIrreducibleOverField(IPolynomial f, BigInteger p)
            {
                IPolynomial splittingField = new Polynomial(
                    new Term[] {
                    new Term(1, (int)p),
                    new Term(-1, 1)
                });

                IPolynomial reducedField = Field.ModMod(splittingField, f, p);

                IPolynomial gcd = Polynomial.GCD(reducedField, f);

                return(gcd.CompareTo(Polynomial.One) == 0);
            }