public static BigInteger SelectAppropriateMod(IntPolynomial f, IntPolynomial SquareFreef) { BigInteger mod = 2; while (true) { while (f[f.degree] % mod == 0) { mod = getNextPrime(mod); } RingPolynomial.SetModContext(mod); RingPolynomial Ringf = new RingPolynomial(SquareFreef); RingPolynomial.GCD(Ringf, Ringf.Derivative(), out RingPolynomial gcdRes); if (gcdRes.degree < 1 && ((Ringf / gcdRes).Quotient).FindNumOfMultipliers() > 0) { break; } mod = getNextPrime(mod); } return(mod); }