HP50g simplifing a root
10-04-2020, 11:48 PM (This post was last modified: 10-10-2020 05:23 PM by Albert Chan.)
Post: #11
 Albert Chan Senior Member Posts: 2,699 Joined: Jul 2018
RE: HP50g simplifing a root
(10-04-2020 06:05 PM)peacecalc Wrote:  I tried two way, the first was to probe every small a from 1 until third root of A. From your example a has to tested from 1 to 670, what a luck, that a = 99. My second approach is to calculate every divisor of A (with DIVI) as a possible candidate for small a. Then I'm calculate the difference A - third power of a. Negative results can be sorted out. The rest is divided by 3*k*a and be square rooted. If the result is a integer and not a algebraic expression would be a solution for smal b. and we get:

$\left( A\pm B\cdot\sqrt{k} \right)^{1/3} = a \pm b\cdot\sqrt{k}$

Based on above description ... not really.

You are solving ³√(A ± B√k) = a ± √r

r = b²k = (A-a³)/(3a) ﻿ ﻿ ﻿ ﻿ ﻿ ﻿ // note: no B's !

(I might be wrong, your code may have used B somewhere)

Here is my lua code, that checked b actually get to B

Code:
cbrt = require'mathx'.cbrt function simp_cbrt1(A, B, k)         -- simplify cbrt(A + B * sqrt(k))     local N = abs(A)     for a = 1+(N-1)%3, cbrt(N), 3 do -- a mod 3 = A mod 3         if N % a ~= 0 then continue end         local r = (N/a - a*a)/3         if r % k ~= 0 then continue end         local b = B / (3*a*a+r)         if r == b*b*k then return (A<0 and -a or a), b, k end     end end

lua> A, B, k = 1859814842094, -59687820010, 415
lua> simp_cbrt1(A,B,k)
11589 ﻿ ﻿ ﻿ ﻿ ﻿ -145 ﻿ ﻿ ﻿ ﻿ ﻿ 415
lua> simp_cbrt1(A,B+1,k)﻿ ﻿ ﻿ ﻿ ﻿ ﻿ -- nothing returned
lua>