# How to factorize high-order polynomials that have only complex roots?

I have polynomials like this:

d = 1 - 28415535000 x + 578834975759040000 x^2 -
74209612276800000 x^3 + 6678865104912000 x^4 -
445257673660800 x^5 + 22585534171200 x^6 - 879955876800 x^7 +
26189163000 x^8 - 581981400 x^9 + 9189180 x^10 - 92820 x^11 +
455 x^12

r = Roots[d == 0, x]

Factor[d]


I want to factorize them according to the fundamental theorem of algebra. Factor[d] returns basically the same polynomial.

How can I factor it?

• Factor factors polynomials over the integers, unless you specify an extension. Do you have any reason to believe that this very complicated polynomial has integer roots (your 'r' does not appear to support this, at least)? Jan 18 at 11:10
• Ah, I missed the integer part. No, I have no reasons to think so. I need the factorization with whatever roots it has. Jan 18 at 11:33

As you have the roots, you can get a factorization up to a overall factor of 455 (the coefficient of x^12) by:

d = 1 - 28415535000  x + 578834975759040000  x^2 -
74209612276800000  x^3 + 6678865104912000  x^4 -
445257673660800  x^5 + 22585534171200  x^6 - 879955876800  x^7 +
26189163000  x^8 - 581981400  x^9 + 9189180  x^10 - 92820  x^11 +
455  x^12;

r =  Roots[d == 0, x]


The output is given as alternatives with "Or". This can be changed to rules using "ToRules". Note also, the roots are given as root objects, that is accurate algebraic numbers. Then, as the rules replace "x" we need to temporarily another variable: "y" for the polynomial, that we then change back to "x". Finally, to get rid of the "Or", we apply Times to the head of the expression:

r1 = (y - x) /. {r // ToRules} /. y -> x;
r1 = Times @@ r1


Next, we account for the overall factor of 455 and expand.

r1 = Expand[ 455   r1]


This gives a real long expression because of the many products of root objects and we do not show it here. Finally we verify that we got the original polynomial back:

d - r1  // Simplify

0