GenPolynomialRing<BigRational> pfac = P.ring;
if (pfac.nvar > 1) {
throw new IllegalArgumentException(this.getClass().getName() + " only for univariate polynomials");
}
GenPolynomial<BigRational> Pr = P;
BigRational ldcf = P.leadingBaseCoefficient();
if (!ldcf.isONE()) {
Pr = Pr.monic();
}
BigInteger bi = BigInteger.ONE;
GenPolynomialRing<BigInteger> ifac = new GenPolynomialRing<>(bi, pfac);
GenPolynomial<BigInteger> Pi = PolyUtil.integerFromRationalCoefficients(ifac, Pr);
List<GenPolynomial<BigInteger>> ifacts = iengine.baseFactorsSquarefree(Pi);
if (ifacts.size() <= 1) {
factors.add(P);
return factors;
}
List<GenPolynomial<BigRational>> rfacts = PolyUtil.fromIntegerCoefficients(pfac, ifacts);
rfacts = PolyUtil.monic(rfacts);
if (!ldcf.isONE()) {
GenPolynomial<BigRational> r = rfacts.get(0);
rfacts.remove(r);
r = r.multiply(ldcf);
rfacts.set(0, r);
}