As in https://mathoverflow.net/a/26859/10423, if your number $x$ ($p(x)=0$) is a sum of two algebraic numbers $y, z$, and $[\mathbb{Q}(y): \mathbb{Q}]$ and $[\mathbb{Q}(z): \mathbb{Q}]$ are relatively prime, we would have
$$ \mathbb{Q}(x) = \mathbb{Q}(y, z). $$
To use this, we might look for subfields $\mathbb{Q}(y) \subset \mathbb{Q}(x) $ generated by particularly simple elements $y$ ($q(y)=0$). Then $x$ would satisfy a polynomial equation $r(x)=0$ of degree $\deg(x)/deg(y)$ whose coefficients are themselves polynomials in $y$.
This can be done in sage. Define the number field generated by your number in the comment:
t = var('t')
K.<x> = NumberField(t^6-12*t^5+54*t^4-116*t^3+132*t^2-120*t+92)
then loop through all subfields $\mathbb{Q}(y)$ generated by sage's K.optimized_subfields
:
xValue = K.polynomial().real_roots()[0]
abstol, reltol = 1e-8, 1e-8
for K0 in K.optimized_subfields(0, name="y"):
print "K0.<%s>:" % K0[0].gen(), K0[0].polynomial()
L.<y,z> = K.relativize(K0[1])
Lp.<w> = K0[0]["w"]
# print "L: ", L
Lrp = L.relative_polynomial();
print "Lrp(x):", Lrp
print "Lrp(w+z):", Lrp(w+z)
if all([c.is_integer() for c in Lrp(w+z).coefficients()]):
print "+++FOUND IT+++"
print "Weight:", sum(c.global_height() for c in L.relative_polynomial().coefficients())
# print "Heights:", (x.global_height(), y.global_height(), z.global_height())
for emb in L.embeddings(ComplexField(200)):
if abs(emb(y) - xValue) > abstol + reltol * abs(xValue): continue
print "Embedding: %s: %s" % (z, emb(z))
This code considers, in turn, each subfield generated by $y$, and prints out the polynomials $q(y)\in\mathbb{Q}[y]$ and polynomial $r(x)\in\mathbb{Q}(y)[x]$, checking whether $r(x)$ can be written as a polynomial in $x-y=z$ with integer coefficients.
There are 12 subfields, snipping part of the output, some of the $y$'s are quite simple:
K0.<y3>: t^2 - 2
Lrp(x): x^3 + (-3*y3 - 6)*x^2 + (12*y3 + 18)*x - 14*y3 - 22
Lrp(w+z): w^3 - 6*w^2 + 12*w - 10
+++FOUND IT+++
Weight: 5.49783963670066
Embedding: y3:
-1.4142135623730950488016887242096980785696718753769480731767
$$ x = -\sqrt{2} + \mathrm{Root}_w(w^3-6w^2+12w-10) $$
K0.<y12>: t^6 - 2
Lrp(x): x - y12^3 - y12^2 - 2
Lrp(w+z): w - y12^3 - y12^2 + y12 - 2
Weight: 0.753631429508173
Embedding: y12:
-1.1224620483093729814335330496791795162324111106139867534404
$$ x = -2-y^2-y^3, \qquad y = -2^{1/6} $$
One might also check for all simple linear expressions $x = z + \lambda y$ by expanding $r(z+\lambda y)$ and checking whether all coefficients of $x^{\geq0}y^{>0}$ can be set to $0$ by a particular choice of $\lambda\in\mathbb{Z}$.
In my testing, I used the root near $-72.5006$ of
333030430968457063019646779392 - 23571307899875281888190922752 * x + 11325756868205077014516072448 * x^2 + 2880637967760945947804168192 * x^3 + 782990884159596744735457280 * x^4 + 40070228472035777844367360 * x^5 + 10282486223601703758015488 * x^6 + 192715657601424647782400 * x^7 + 21281445409747778775040 * x^8 - 2726796545369319832704 * x^9 - 83259682551880061952 * x^10 + 4445241731011609472 * x^11 + 1435507363311897496 * x^12 + 355547636535862912 * x^13 + 37061676308129376 * x^14 + 2332115507866947 * x^15 + 238642514161488 * x^16 + 13466590646101 * x^17 + 1032053823392 * x^18 + 55985523438 * x^19 + 2712768664 * x^20 + 109992986 * x^21 + 2837824 * x^22 + 41695 * x^23 + 320 * x^24 * x^25
which is
$$ 7 \mathrm{Root}_{x\approx-1.214}(8 + 3 x^3 + x^5) + 8 \mathrm{Root}_{x\approx-8.000}(2 + 8 x^4 + x^5). $$
So it works for $\deg(x)=25$, but in general it probably takes exponential time or worse, not polynomial. On the plus (?) side it generalizes the problem from looking for sums (not products, though) to looking for polynomial relations with algebraic coefficients.
coefSubstitutions
? – Vladimir Reshetnikov Feb 12 '16 at 18:19Root[{92 - 120 # + 132 #^2 - 116 #^3 + 54 #^4 - 12 #^5 + #^6 &, 1.84570748752177}]
. I replacedSolve
withFindInstance[…, Integers]
to deal with free parameters. – Vladimir Reshetnikov Feb 12 '16 at 21:03