FLINT3.7.0-dev
Algorithm

Factoring polynomials over the integers

Cost
Zassenhaus recombination tries up to 2r−12^{r-1} subsets of the rr modular factors; van Hoeij's algorithm with gradual feeding runs in time polynomial in the degree and the coefficient size, and in practice its cost is dominated by the modular factorisation and the Hensel lifting.

Factoring a polynomial f∈Z[x]f \in \mathbb{Z}[x] means writing it as f=c∏ifieif = c \prod_i f_i^{e_i} with c∈Zc \in \mathbb{Z} and distinct primitive irreducible fif_i of positive degree. By Gauss' lemma this is the same as factoring over Q\mathbb{Q}, up to the content. All practical methods follow the plan of Zassenhaus [Zas1969]: factor ff modulo a small prime pp, which is easy (Factoring polynomials over finite fields), lift the modular factorisation to one modulo a large power pap^a (Hensel lifting), and find out which products of modular factors are true factors. The last step, the recombination, is the difficult one: a polynomial with rr modular factors has 2r2^r candidate subsets. Lenstra, Lenstra and Lovász showed that factoring is possible in polynomial time [LLL1982], but their algorithm was not competitive. Van Hoeij [vHo2002] turned the recombination into a knapsack problem solved by lattice reduction, which is fast in practice and, with the refinements of Belabas, van Hoeij, Klüners and Steel [BHKS2009], van Hoeij and Novocin [vHN2010], and Hart, van Hoeij and Novocin [HvHN2011], provably polynomial. The implementation in FLINT is due to Novocin and Hart and follows [HvHN2011] and [Nov2008].

Throughout, ff has degree nn and leading coefficient ℓ=lc⁡(f)>0\ell = \operatorname{lc}(f) > 0, and ∥f∥2\|f\|_2 is the Euclidean norm of its coefficient vector.

Reductions#

fmpz_poly_factor first reduces to the factorisation of squarefree primitive polynomials with nonzero constant term:

  1. The content is removed, with the sign of ℓ\ell. Polynomials of degree at most 3 are handled directly: a quadratic splits if and only if its discriminant is a square, and a cubic is reducible if and only if it has a rational root, which _fmpz_poly_factor_cubic locates from real and 2-adic approximations of the roots (Cubics).
  2. The factor xkx^k is split off.
  3. If f=g(xd)f = g(x^d) with d>1d > 1, the polynomial gg of degree n/dn/d is factored, and the inflation h(xd)h(x^d) of each irreducible factor hh of gg is handled separately (Deflation and Capelli's theorem).
  4. Otherwise fmpz_poly_factor_squarefree computes the squarefree factorisation f=∏igiif = \prod_i g_i^i by Yun's algorithm [Yun1976] (Squarefree factorisation), with the GCDs of GCDs of polynomials over Z, and each gig_i is factored by _fmpz_poly_factor_zassenhaus.

Deflation and Capelli's theorem#

If hh is irreducible, h(xd)h(x^d) need not be: x−4x - 4 is irreducible but x2−4x^2 - 4 is not. For prime exponents, Capelli's theorem decides the question [Sch2000].

Theorem 1 (Capelli). Let h∈Q[x]h \in \mathbb{Q}[x] be irreducible, θ\theta a root of hh, K=Q(θ)K = \mathbb{Q}(\theta) and pp a prime. Then h(xp)h(x^p) is irreducible over Q\mathbb{Q} if and only if θ\theta is not a pp-th power in KK.

FLINT applies the prime case along a chain h(xd)=U(xd/p)h(x^d) = U(x^{d/p}) with U=h(xp)U = h(x^p). A witness that θ\theta is not a pp-th power is a prime qq and a residue field Fqf\mathbb{F}_{q^f} of KK above qq in which the image of θ\theta is not a pp-th power, which by Euler's criterion means θ(qf−1)/p≠1\theta^{(q^f - 1)/p} \ne 1 when p∣qf−1p \mid q^f - 1. _fmpz_poly_factor_inflation_is_irreducible_capelli searches for a witness with a budget linear in deg⁡h\deg h; if it finds one, h(xp)h(x^p) is irreducible, and otherwise h(xp)h(x^p) is factored by the general algorithm at degree pdeg⁡hp \deg h, which is still smaller than factoring ff from scratch.

Cubics#

_fmpz_poly_factor_cubic looks for rational roots instead of factoring modulo a prime, by a method from Schultz's notes [Sch-mpoly]. Let f=ax3+bx2+cx+df = a x^3 + b x^2 + c x + d with a>0a > 0. With X=3ax+bX = 3a x + b,

27a2f=X3−3AX−B,A=b2−3ac,B=(9ac−2b2)b−27a2d,27 a^2 f = X^3 - 3 A X - B, \qquad A = b^2 - 3ac, \qquad B = (9ac - 2b^2) b - 27 a^2 d,

and a rational root of the monic g=X3−3AX−B∈Z[X]g = X^3 - 3AX - B \in \mathbb{Z}[X] is an integer. Each integer root rr of gg gives the factor pp⁡(3ax+b−r)\operatorname{pp}(3a x + b - r) of ff. The integer roots of gg are found as follows (the cases B=0B = 0 and B=±1B = \pm 1 are immediate).

  1. Small primes. If AA and BB are odd, g≡X3+X+1(mod2)g \equiv X^3 + X + 1 \pmod 2 has no root, so ff is irreducible. If gg has no root modulo one of the primes 5,7,…,295, 7, \ldots, 29, ff is irreducible; this is tested at once by computing ∏x=028g(x)\prod_{x=0}^{28} g(x) modulo the product of these primes, which fits in a word.
  2. Discriminant. Let D=B2−4A3D = B^2 - 4A^3, so that the discriminant of gg is −27D-27D. If D=0D = 0, the roots are B/AB/A and the double root −B/(2A)-B/(2A). If D>0D > 0, gg has one real root, (4B+4D3+4B−4D3)/2\bigl(\sqrt[3]{4B + 4\sqrt D} + \sqrt[3]{4B - 4\sqrt D}\bigr)/2 by Cardano's formula; it is computed with integer square and cube roots, and the three integers around the approximation are tested.
  3. Three real roots (D<0D < 0, hence A>0A > 0). With X=2Acos⁡θX = 2\sqrt{A} \cos \theta the equation becomes 2A3/2cos⁡3θ=B2 A^{3/2} \cos 3\theta = B, so all roots satisfy ∣r∣≤2A|r| \le 2\sqrt A. After a test modulo the primes 31,…,4731, \ldots, 47, the roots are computed in the 2-adic integers Z2\mathbb{Z}_2 to a precision 2k2^k with 2k−1>2A2^{k - 1} > 2\sqrt A, reduced to the symmetric range, and tested exactly.

For the 2-adic roots write −3A=2αa′-3A = 2^{\alpha} a' and −B=2βb′-B = 2^{\beta} b' with a′,b′a', b' odd, so that g=X3+2αa′X+2βb′g = X^3 + 2^\alpha a' X + 2^\beta b'. The Newton polygon of gg at 2 gives three cases.

  • 2β=3α2\beta = 3\alpha: with X=2β/3YX = 2^{\beta/3} Y, g=2β(Y3+a′Y+b′)g = 2^\beta (Y^3 + a' Y + b'), which has no root modulo 2; gg has no root in Z2\mathbb{Z}_2, and ff is irreducible.
  • 2β<3α2\beta < 3\alpha: all roots have valuation β/3\beta/3, so if 3∤β3 \nmid \beta there is none in Z2\mathbb{Z}_2. Otherwise X=2β/3YX = 2^{\beta/3} Y gives 2β(Y3+2α−2β/3a′Y+b′)2^\beta (Y^3 + 2^{\alpha - 2\beta/3} a' Y + b'), which is (Y+1)(Y2+Y+1)(Y + 1)(Y^2 + Y + 1) modulo 2 with an irreducible quadratic factor, so there is exactly one root in Z2\mathbb{Z}_2, found by Hensel lifting.
  • 2β>3α2\beta > 3\alpha: with X=2β−αYX = 2^{\beta - \alpha} Y and e=2β−3α>0e = 2\beta - 3\alpha > 0, g=2β(2eY3+a′Y+b′)g = 2^\beta (2^e Y^3 + a' Y + b'), which has the simple root Y≡1Y \equiv 1 modulo 2. Newton iteration, doubling the precision at each step, lifts the factorisation

    2eY3+a′Y+b′=(Y+r)(2eY2−2erY+s),r,s∈Z2 odd,2^e Y^3 + a' Y + b' = (Y + r)(2^e Y^2 - 2^e r Y + s), \qquad r, s \in \mathbb{Z}_2 \text{ odd},

    that is, g=(X+2β−αr)(X2−2β−αrX+2αs)g = (X + 2^{\beta - \alpha} r)(X^2 - 2^{\beta - \alpha} r X + 2^\alpha s). The roots of the quadratic have valuation α/2\alpha/2. If α\alpha is odd, −2β−αr-2^{\beta - \alpha} r is the only root in Z2\mathbb{Z}_2. If α\alpha is even, the other roots are

    2β−α−1r±2α/222β−3α−2r2−s,2^{\beta - \alpha - 1} r \pm 2^{\alpha/2} \sqrt{2^{2\beta - 3\alpha - 2} r^2 - s},

    with a 2-adic square root (an odd 2-adic integer is a square if and only if it is 11 modulo 8). The square root loses precision, so rr and ss are lifted further when the result is not precise enough.

Once an integer root r0r_0 has been found, the other roots are those of X2+r0X+r02−3AX^2 + r_0 X + r_0^2 - 3A, rational if and only if 3(4A−r02)3(4A - r_0^2) is a square. The method costs a bounded number of integer square and cube roots and 2-adic Newton iterations on numbers of the size of the coefficients, so it is much faster than the general algorithm for cubics with large coefficients.

The modular factorisation#

Let ff be squarefree and primitive with f(0)≠0f(0) \ne 0. A prime pp is admissible if p∤ℓp \nmid \ell, p∤f(0)p \nmid f(0) and f mod pf \bmod p is squarefree; all but finitely many primes are, since f mod pf \bmod p is squarefree when pp divides neither ℓ\ell nor the discriminant. For an admissible prime,

f≡ℓ g1g2⋯gr(modp)f \equiv \ell \, g_1 g_2 \cdots g_r \pmod p

with distinct monic irreducible gi∈Fp[x]g_i \in \mathbb{F}_p[x], and every irreducible factor gg of ff in Z[x]\mathbb{Z}[x] reduces to lc⁡(g)∏i∈Sgi\operatorname{lc}(g) \prod_{i \in S} g_i for a subset SS, the subsets of distinct factors being disjoint. In particular ff has at most rr irreducible factors, and it is irreducible if r=1r = 1.

_fmpz_poly_factor_zassenhaus factors ff modulo the first three admissible primes, starting from 2, and keeps the one with the fewest factors, since the cost of recombination grows with rr. The factor degrees modulo all three primes are combined: a true factor of degree kk is a product of modular factors of total degree kk modulo each prime, so kk must be a subset sum of the modular degrees for all three. The zassenhaus_prune functions maintain the set of such degrees; if it contains no degree strictly between 0 and nn, the polynomial is irreducible, and otherwise subsets of an impossible degree are skipped during recombination. By Chebotarev's density theorem, the factor degrees modulo a random prime are the cycle lengths of a random element of the Galois group, so for a polynomial with Galois group SnS_n, the typical case, rr is about log⁡n\log n on average.

Bounds and precision#

Recombination recovers a factor from its image modulo pap^a, which requires a bound for its coefficients.

Theorem 2 (Mignotte). If g=∑j=0mbjxj∈Z[x]g = \sum_{j=0}^m b_j x^j \in \mathbb{Z}[x] divides ff in Z[x]\mathbb{Z}[x], then for all jj

∣bj∣≤(m−1j)∥f∥2+(m−1j−1)∣lc⁡(f)∣,|b_j| \le \binom{m-1}{j} \|f\|_2 + \binom{m-1}{j-1} |\operatorname{lc}(f)|,

and in particular ∥g∥∞≤2m∥f∥2\|g\|_\infty \le 2^m \|f\|_2 [Mig1974], [Coh1996, Theorem 3.5.1].

fmpz_poly_factor_mignotte computes BB, the maximum of this bound over 1≤j<n1 \le j < n with ∥f∥2\|f\|_2 rounded up, of ∣f(0)∣|f(0)| and of ℓ\ell, so that every proper factor of ff has coefficients bounded by BB (the extreme coefficients of a factor divide those of ff).

Lemma 3 (Recovering a factor). Let g∈Z[x]g \in \mathbb{Z}[x] be a primitive divisor of ff with positive leading coefficient, let f≡ℓ∏i=1rgi(modpa)f \equiv \ell \prod_{i=1}^r g_i \pmod{p^a} with monic gig_i, and suppose that g≡lc⁡(g)∏i∈Sgi(modpa)g \equiv \operatorname{lc}(g) \prod_{i \in S} g_i \pmod{p^a}. If pa>2ℓBp^a > 2 \ell B, then gg is the primitive part of the polynomial g~\tilde g with coefficients in (−pa/2,pa/2](-p^a/2, p^a/2] that is congruent to ℓ∏i∈Sgi\ell \prod_{i \in S} g_i modulo pap^a.

Proof. The polynomial (ℓ/lc⁡(g)) g(\ell / \operatorname{lc}(g))\, g has integer coefficients, because lc⁡(g)∣ℓ\operatorname{lc}(g) \mid \ell, and it is congruent to ℓ∏i∈Sgi\ell \prod_{i \in S} g_i modulo pap^a, since lc⁡(g)\operatorname{lc}(g) is invertible modulo pp. Its coefficients are bounded by ℓB<pa/2\ell B < p^a/2 in absolute value, so it is equal to g~\tilde g, and its primitive part is gg.

The Zassenhaus algorithm therefore lifts to the least aa with pa≥2ℓB+1p^a \ge 2 \ell B + 1.

Zassenhaus recombination#

Algorithm 1: Zassenhaus recombination

Input: squarefree primitive ff, monic g1,…,grg_1, \ldots, g_r with f≡ℓ∏gi(modpa)f \equiv \ell \prod g_i \pmod{p^a}, where pa>2ℓBp^a > 2 \ell B.

Output: the irreducible factors of ff.

  1. T←{1,…,r}T \gets \{1, \ldots, r\}, F←fF \gets f, k←1k \gets 1.
  2. While 2k≤∣T∣2k \le |T|: for each S⊆TS \subseteq T with ∣S∣=k|S| = k and a possible total degree, let hh be the primitive part of the symmetric residue of lc⁡(F)∏i∈Sgi\operatorname{lc}(F) \prod_{i \in S} g_i modulo pap^a; if h∣Fh \mid F, output hh and set F←F/hF \gets F/h and T←T∖ST \gets T \setminus S. Then k←k+1k \gets k + 1.
  3. Output FF if deg⁡F>0\deg F > 0.

Theorem 4. Algorithm 1 outputs the irreducible factors of ff.

Proof. Every irreducible factor of FF corresponds to a subset of TT, and the subsets of distinct factors partition TT. A factor hh found for a subset SS divides FF; if it were reducible, its irreducible factors would correspond to proper subsets of SS, which were tried earlier and would have been removed from FF. So every output is irreducible. Since F∣fF \mid f, the bound BB applies to the factors of FF, and lc⁡(F)∣ℓ\operatorname{lc}(F) \mid \ell; by Lemma 3 (with FF and lc⁡(F)\operatorname{lc}(F) in place of ff and ℓ\ell) the factor of FF with subset SS is found when SS is tried. When all subsets of size at most ∣T∣/2|T|/2 have been tried, FF is irreducible, since a reducible FF would have a factor with at most half of the remaining modular factors.

The number of subsets tried is at most ∑k≤r/2(rk)≤2r−1\sum_{k \le r/2} \binom{r}{k} \le 2^{r-1}, and each test is a trial division, made cheap by fmpz_poly_divides, which first compares the constant coefficients and the values at 1. This is fast when rr is small, the typical case, and hopeless when rr is large. FLINT uses Zassenhaus recombination for r≤8r \le 8.

Van Hoeij's algorithm#

Van Hoeij's idea [vHo2002] is to represent subsets by indicator vectors v∈{0,1}rv \in \{0, 1\}^r and to find the vectors of the true factors as short vectors of a lattice. Let g1,…,grg_1, \ldots, g_r be monic with f≡ℓ∏gi(modpa)f \equiv \ell \prod g_i \pmod{p^a}, and for S⊆{1,…,r}S \subseteq \{1, \ldots, r\} let gS=∏i∈Sgig_S = \prod_{i \in S} g_i.

Logarithmic derivatives#

The map g↦fg′/gg \mapsto f g'/g turns products into sums:

fgS′gS=∑i∈Sfgi′gi.\frac{f g_S'}{g_S} = \sum_{i \in S} \frac{f g_i'}{g_i}.

The coefficients of the logarithmic derivative (CLD) are the coefficients of the polynomials fgi′/gif g_i' / g_i, which have degree less than nn and are well defined modulo pap^a, since gig_i divides ff there. If gg is a true factor of ff, then fg′/g=(f/g)g′∈Z[x]f g'/g = (f/g) g' \in \mathbb{Z}[x], and its coefficients are much smaller than pap^a: on ∣x∣=ρ|x| = \rho, fg′/g=f∑α1/(x−α)f g'/g = f \sum_\alpha 1/(x - \alpha) over the roots α\alpha of gg, and splitting the coefficients of ff at index jj gives the bound computed by fmpz_poly_CLD_bound [HvHN2011]: with f=∑aixif = \sum a_i x^i and any ρ>0\rho > 0, the coefficient of xjx^j in fg′/gf g'/g is at most

nmax⁡(ρ−(j+1)∑i≤j∣ai∣ρi,  ρ−(j+1)∑i>j∣ai∣ρi),n \max\left( \rho^{-(j+1)} \sum_{i \le j} |a_i| \rho^i,\; \rho^{-(j+1)} \sum_{i > j} |a_i| \rho^i \right),

which is minimised numerically over ρ\rho. For the kk lowest and kk highest coefficients jj, let cijc_{ij} be the coefficient of xjx^j in fgi′/gif g_i'/g_i reduced into (−pa/2,pa/2](-p^a/2, p^a/2] (_fmpz_poly_factor_CLD_mat). If vv is the indicator vector of a true factor gg, then ∑ivicij≡[xj] fg′/g(modpa)\sum_i v_i c_{ij} \equiv [x^j]\, f g'/g \pmod{p^a} is small. The low coefficients are computed with fmpz_poly_mullow and fmpz_poly_divlow_smodp, the high ones with fmpz_poly_mulhigh_n and fmpz_poly_divhigh_smodp, so that only O(k)O(k) coefficients of each product are needed.

The knapsack lattice#

For a set JJ of CLD columns, let LL be the lattice spanned by the rows of

(2UIrC0paI∣J∣),C=(cij)i≤r, j∈J,\begin{pmatrix} 2^U I_r & C \\ 0 & p^a I_{|J|} \end{pmatrix}, \qquad C = (c_{ij})_{i \le r,\, j \in J},

with each column of CC scaled down so that the values produced by true factors become small. The vector (2Uv,…)(2^U v, \ldots) of a true factor then has length at most about 2Ur+12^U \sqrt{r + 1}, while a random 0-1 combination produces entries of the size of pap^a. The vectors of the true factors span a sublattice WW whose rank is the number of irreducible factors, and the reduced echelon basis of WW consists of the indicator vectors of the factors, a 0-1 basis. Lattice reduction finds a basis of a lattice L′⊇WL' \supseteq W of decreasing rank, by the following lemma.

Lemma 5 (Short vectors after reduction). Let b1,…,bmb_1, \ldots, b_m be a basis of a lattice with Gram–Schmidt vectors b1∗,…,bm∗b_1^*, \ldots, b_m^*, and suppose ∥bi∗∥>β\|b_i^*\| > \beta for all i>ki > k. Then every lattice vector of norm at most β\beta lies in the span of b1,…,bkb_1, \ldots, b_k.

Proof. Write v=∑i≤jcibiv = \sum_{i \le j} c_i b_i with integers cic_i and cj≠0c_j \ne 0. The component of vv orthogonal to b1,…,bj−1b_1, \ldots, b_{j-1} is cjbj∗c_j b_j^*, so ∥v∥≥∣cj∣∥bj∗∥≥∥bj∗∥\|v\| \ge |c_j| \|b_j^*\| \ge \|b_j^*\|. If ∥v∥≤β\|v\| \le \beta, then ∥bj∗∥≤β\|b_j^*\| \le \beta, so j≤kj \le k.

After each LLL reduction, fmpz_lll_with_removal_ulll drops the final basis vectors whose Gram–Schmidt norm exceeds the bound β2=(r+1)22U\beta^2 = (r + 1) 2^{2U} (LLL with removals, with the truncation strategy Truncation: ULLL); by the lemma, WW survives. Each new column of CLD data can only lower the rank of L′L', and enough columns at enough precision make L′=WL' = W [vHo2002], [HvHN2011].

Algorithm 2: Van Hoeij's algorithm with gradual feeding

Input: squarefree primitive ff of degree nn and its factorisation modulo an admissible prime pp into rr monic factors.

Output: the irreducible factors of ff.

  1. Choose an initial precision aa (see below) and lift the factors to precision pap^a. Set M←2UIrM \gets 2^U I_r with U=⌈log⁡2(max⁡(r,20)+1)⌉U = \lceil \log_2 (\max(r, 20) + 1) \rceil.
  2. If the first rr columns of MM define a partition of {1,…,r}\{1, \ldots, r\}, form the corresponding products; if they all divide ff, output them and stop.
  3. Compute the CLD data for kk low and kk high coefficients, leaving out coefficients whose CLD bound is too large compared to pap^a.
  4. For each new column, taken alternately from the low and the high end: append it to MM, keeping only the bits of the entries above the CLD bound (fmpz_mat_next_col_van_hoeij); if this makes the matrix worth reducing, run LLL with removal, and go to step 2.
  5. When the columns are used up, double kk (up to about n/2n/2); when all coefficients have been used, double the precision aa, continue the Hensel lift, and go to step 2.

The test in step 2 is fmpz_poly_factor_van_hoeij_check_if_solved: it reads a partition from the echelon form of the first rr columns (fmpz_mat_col_partition), forms the products of the lifted factors in each part, multiplied by ℓ\ell and reduced modulo pap^a, and checks that their primitive parts divide ff, first modulo 2 and then over Z\mathbb{Z}. Since the answer is verified by division, the output is always correct; the bounds only ensure that the algorithm makes progress and terminates.

Gradual feeding, adding one column at a time, keeps each LLL call on a matrix whose new column has only a few more bits than the reduced basis, which is what makes the total work polynomial [vHN2010], [HvHN2011]. The starting precision is about the least aa with

pa≥22.5r+bn+1,p^a \ge 2^{2.5 r + b} \sqrt{n + 1},

where bb is the bit size of the smaller of the CLD bounds of the lowest and the highest coefficient, but not more than the Zassenhaus precision. This is usually far below the Mignotte bound and enough for the first few columns to determine the factorisation; otherwise the precision is doubled and the Hensel lift continued with _fmpz_poly_hensel_continue_lift. The first rounds use k=30k = 30 (or 50 for r>200r > 200) coefficients from each end instead of 10 when 3r>n+13r > n + 1.

Complexity#

For a polynomial of degree nn with bb-bit coefficients, the Mignotte precision is alog⁡p=O(n+b)a \log p = O(n + b) bits, and the Hensel lift to that precision costs O(M(n)log⁡r)O(M(n) \log r) operations on integers of that size (Hensel lifting). Zassenhaus recombination adds up to 2r−12^{r-1} trial divisions. Van Hoeij's algorithm with gradual feeding runs in time polynomial in nn and bb [HvHN2011], and usually needs much less than the Mignotte precision; the LLL work is small unless rr is large and there are many factors of similar degree. The classical worst cases of the Zassenhaus algorithm, such as the Swinnerton-Dyer polynomials of degree n=2kn = 2^k, which have n/2n/2 factors modulo every prime, are easy: proving S7(x+1)S_7(x + 1), of degree 128, irreducible takes about 0.1 seconds on the x86-64 machine used for this documentation.

Use in FLINT#

Referenced from#

References#

  • [Zas1969] H. Zassenhaus. On Hensel factorization, I. Journal of Number Theory 1 (1969), 291–311. https://doi.org/10.1016/0022-314X(69)90047-X
  • [LLL1982] A. K. Lenstra, H. W. Lenstra, Jr. and L. Lovász, "Factoring polynomials with rational coefficients", Mathematische Annalen 261 (1982), 515–534. https://doi.org/10.1007/BF01457454
  • [vHo2002] M. van Hoeij. Factoring polynomials and the knapsack problem. Journal of Number Theory 95 (2002), 167–189. https://doi.org/10.1006/jnth.2001.2763
  • [BHKS2009] K. Belabas, M. van Hoeij, J. Klüners and A. Steel. Factoring polynomials over global fields. Journal de Théorie des Nombres de Bordeaux 21 (2009), 15–39. https://doi.org/10.5802/jtnb.655
  • [vHN2010] M. van Hoeij and A. Novocin, "Gradual sub-lattice reduction and a new complexity for factoring polynomials", LATIN 2010, Lecture Notes in Computer Science 6034 (2010), 539–553. https://doi.org/10.1007/978-3-642-12200-2_47
  • [HvHN2011] W. Hart, M. van Hoeij and A. Novocin. Practical polynomial factoring in polynomial time. ISSAC 2011, 163–170. https://doi.org/10.1145/1993886.1993915
  • [Nov2008] A. Novocin. Factoring univariate polynomials over the rationals. PhD thesis, Florida State University, 2008.
  • [Yun1976] D. Y. Y. Yun. On square-free decomposition algorithms. Proceedings of the 1976 ACM Symposium on Symbolic and Algebraic Computation (SYMSAC '76), 26–35. https://doi.org/10.1145/800205.806320
  • [Sch2000] A. Schinzel. Polynomials with Special Regard to Reducibility. Cambridge University Press, 2000. https://doi.org/10.1017/CBO9780511542916
  • [Sch-mpoly] D. Schultz. Algorithms for multivariate polynomials. Notes in the FLINT source tree, src/mpoly/doc/MPolyAlgorithms.tex.
  • [Mig1974] M. Mignotte. An inequality about factors of polynomials. Mathematics of Computation 28 (1974), 1153–1157. https://doi.org/10.1090/S0025-5718-1974-0354624-3
  • [Coh1996] Cohen, Henri : A course in computational algebraic number theory, Springer, 1996
Cite this page

The FLINT team, “Factoring polynomials over the integers,” FLINT: Fast Library for Number Theory, documentation, version 3.7.0-dev, 2026. https://flintlib.org/doc/algorithms/polynomials/factoring-integers.html (generated 2026-11-02).