Why the candidate list is finite at all
Suppose p/q is a root in lowest terms. Substitute it, multiply through by qn, and every term but one has a factor of q — so q must divide the leading coefficient. Move a different term across instead and every term but one has a factor of p, so p must divide the constant term. Two divisibility conditions, and between them they leave only finitely many possibilities.
That is the whole theorem, and it is why the method works: an infinite search becomes a finite one. For 2x³ − 3x² − 11x + 6 the constant is 6 and the leading coefficient is 2, so p ∈ {1, 2, 3, 6} and q ∈ {1, 2}, giving 12 candidates once duplicates in lowest terms are removed.
Note what the theorem does not say. It does not promise a rational root exists, and it says nothing whatever about irrational or complex ones. It is a statement of the form “if there is a rational root, it is one of these” — which is exactly what makes an exhausted list a proof rather than a failed attempt.
What the bound rules buy you
Testing every candidate works and is slow. Two rules cut the list down first, and both fall out of synthetic division you were going to do anyway:
- Upper bound. Divide by a positive candidate c. If the bottom row has no negative entry, no number larger than c can be a root — every larger divisor would make the running total grow and never return to zero.
- Lower bound. Divide by a negative candidate c. If the signs of the bottom row alternate, nothing smaller than c can be a root.
For x⁴ − 5x² + 4 the candidate list runs to 6 entries, and the bounds strike off 0 of them without evaluating the polynomial there. The tool marks those rows “not tested” rather than “not a zero”, because those are different claims and only one of them was checked.
On a degree-8 polynomial with a constant like 60 the candidate list can run past a hundred entries, and this is the difference between a method you would actually use by hand and one you would not.
Synthetic division, and why it is the right tool here
Once a candidate tests as a root, the polynomial should be divided by (x − r) before the search continues — the remaining polynomial is one degree smaller, so its candidate list is shorter and its arithmetic is easier. Synthetic division does that in one row of additions.
It also does double duty. The last entry of the bottom row is the remainder, which by the remainder theorem is f(r) — so the same three lines that divide out a root also test whether it is one. A zero there means the division was exact; anything else means the candidate missed.
x⁴ − 5x² + 4 shows the cascade: 4 roots divided out in turn, each leaving a smaller polynomial, ending at a constant. That is what “factors completely over the rationals” looks like as a procedure — (x + 2)(x + 1)(x − 1)(x − 2).
When a zero constant term breaks the theorem
If the constant term is zero, every integer divides it, and the candidate list is infinite. The theorem has not failed; it simply does not apply, and a tool that returns an empty list there is reporting something false.
The fix is one line of factoring. A zero constant means x itself is a factor, so pull out the highest power of x that divides the polynomial. That hands you the root x = 0 with its multiplicity for free, and leaves a polynomial with a non-zero constant that the theorem does cover.
x⁴ − 2x³ − 8x² is that case: x² comes out first, giving x = 0 as a double root, and the search then runs on x² − 2x − 8. The complete factorisation is x²(x + 2)(x − 4).
“No rational zeros” is a result, not a failure
x³ − 2 has 4 candidates, and none of them is a root. That is not an inconclusive search — it is a proof that the polynomial has no rational roots at all, because the theorem guarantees any rational root would have been in that list.
It still has three roots. One is the real cube root of 2, an irrational number, and the other two are complex. The theorem is silent about all three, which is the correct behaviour: it is a tool for finding rational roots and it says so.
This matters because “does not factor over the rationals” is a genuine and useful property. It is what makes x³ − 2 irreducible over ℚ, and it is the reason the cube root of 2 cannot be constructed with straightedge and compass — a two-thousand-year-old question answered by exactly this kind of argument.
What is left over, and what to do with it
After every rational root is divided out, something remains. If it is a constant, the polynomial factored completely. If it is a quadratic, the quadratic formula finishes it exactly — irrational or complex, but exact.
x⁵ − 2x⁴ − x + 2 ends that way: the rational roots are −1, 1, 2, and what remains is x² + 1, which has no rational roots but is perfectly factorable over the complex numbers. Over the integers, (x + 1)(x − 1)(x − 2)(x² + 1) is the complete factorisation, and leaving that quadratic whole is the right answer rather than an unfinished one.
If what remains is degree 3 or more with no rational roots, exact radicals may not exist — that is the Cubic Equation Calculator’s territory, where the same question gets a numerical answer and an explanation of why. 3x⁴ + 5x³ − 5x² − 5x + 2 is the happier case: every root rational, including 1/3, which the q-list is there to find.
Sources and methodology
The Rational Root Theorem and the bound rules are standard results; the reference below is where their canonical statements live.
Method. Every figure on this page comes from src/lib/rational-zeros.ts over the exact-rational polynomial arithmetic in src/lib/algebra/poly.ts. The candidate list, the value of the polynomial at each candidate, the synthetic divisions and the factorisation are all exact integer and fraction arithmetic — no candidate is accepted or rejected on a floating-point comparison. That engine is verified on every change against 52 hand-written assertions, including that the printed factorisation multiplies back to the original polynomial and that the bound rules never strike off an actual root. The count and the per-case breakdown are published on the formula verification page.
Read the guide
Finding the zeros is one half of the work; knowing what kind to expect is the other. Adding, Multiplying and Dividing Polynomials — the Four Operations covers the division this page leans on, including the missing-power column that shifts a synthetic division and produces a plausible wrong answer.