1 | initial version |
Max gives us a shortcut allowing us to use brute force to check for (positive) roots of this system. But what is the solution ?
First, let's see how Max's shortcut can be derived in Sage :
sage: var("x, y, z, p")
(x, y, z, p)
Our initial equations are :
sage: E1=x+y+z==24*p+3
sage: E2=x*y*z==576*p^3+216*p^2+27*p-25
Let's solve E2, keeping only real roots, but with no consideration for their integrity
sage: E2.solve(p)
[p == -1/16*(8/9*x*y*z + 209/9)^(1/3)*(I*sqrt(3) + 1) - 1/8, p == -1/16*(8/9*x*y*z + 209/9)^(1/3)*(-I*sqrt(3) + 1) - 1/8, p == 1/24*(24*x*y*z + 627)^(1/3) - 1/8]
Substitute in E1 :
sage: E1.subs(E2.solve(p)[2])^3
(x + y + z)^3 == 24*x*y*z + 627
AM-GM inequality gives us :
sage: I1=(x+y+z)/3>=(x*y*z)^(1/3)
sage: ((I1*3)^3)
(x + y + z)^3 >= 27*x*y*z
Adding our constraints :
sage: (((I1*3)^3).subs(E1.subs(E2.solve(p)[2])^3))
24*x*y*z + 627 >= 27*x*y*z
which results in:
sage: I2=(((I1*3)^3).subs(E1.subs(E2.solve(p)[2])^3)).solve(x*y*z)
[[x*y*z - 209 == 0], [-x*y*z + 209 > 0]]
This upper limit allows us to program a "brute-force" search :
sage: %%time
....: L=[]
....: for a in (1..209):
....: for b in (1..209//a):
....: for c in (1..209//(a*b)):
....: D1={x:a, y:b, z:c}
....: S1=E1.subs(D1).solve_diophantine(solution_dict=True)
....: if len(S1)>0:
....: L2=[D1.update(s) for s in S1 if bool(E2.subs(D1).subs(S1))]
....: if len(L2)>0: L.append(L2)
....:
CPU times: user 34.3 s, sys: 16 ms, total: 34.4 s
Wall time: 34.4 s
But :
sage: L
[]
The original system doesn't seem to have solutions. A check seems in order...