Unfortunately, I no longer have enough brain cells to remember or figure out how it works. It somehow gets exact expressions by taking the inverse Fourier transform of numerically approximated roots, without all the Galois group and resolvent rigamarole. I.e., it claims to find the radicals when they exist, subject to adjustable limits on coefficient size. Two examples (tim is just a timing function): In[451]:= squint[x^5 - 5 x x - 3] // tim During evaluation of In[451]:= 0.319225 seconds, 5 roots Out[451]= {-((-1)^(3/5)/(2^(2/5) (5/(5 - Sqrt[5] - Sqrt[6 (5 - 11/Sqrt[5])]))^( 1/5))) + ((-1)^(2/5) (1/5 (5 - Sqrt[5] + Sqrt[6 (5 - 11/Sqrt[5])]))^(1/5))/2^( 2/5) - (-1 - 1/Sqrt[5] - 2 Sqrt[3/10 + 33/(50 Sqrt[5])])^(1/5)/2^( 2/5) - ((-1)^(3/5) (1 + 1/Sqrt[5] - 2 Sqrt[3/10 + 33/(50 Sqrt[5])])^(1/5))/2^(2/5), 1/(2^(2/5) (5/(5 - Sqrt[5] - Sqrt[6 (5 - 11/Sqrt[5])]))^( 1/5)) + (1/5 (5 - Sqrt[5] + Sqrt[6 (5 - 11/Sqrt[5])]))^(1/5)/2^( 2/5) + ((-1)^(4/5) (1 + 1/Sqrt[5] - 2 Sqrt[3/10 + 33/(50 Sqrt[5])])^(1/5))/2^( 2/5) + (1 + 1/Sqrt[5] + 2 Sqrt[3/10 + 33/(50 Sqrt[5])])^(1/5)/2^(2/5), ((-1)^(4/5) (1/5 (5 - Sqrt[5] + Sqrt[6 (5 - 11/Sqrt[5])]))^( 1/5))/2^(2/5) - (1/5 (-5 + Sqrt[5] + Sqrt[6 (5 - 11/Sqrt[5])]))^( 1/5)/2^(2/5) + ((-1)^(2/5) (1 + 1/Sqrt[5] - 2 Sqrt[3/10 + 33/(50 Sqrt[5])])^(1/5))/2^( 2/5) + ((-1)^(2/5) (1 + 1/Sqrt[5] + 2 Sqrt[3/10 + 33/(50 Sqrt[5])])^(1/5))/2^(2/5), (-1)^(4/5)/(2^(2/5) (5/(5 - Sqrt[5] - Sqrt[6 (5 - 11/Sqrt[5])]))^( 1/5)) - (1/5 (-5 + Sqrt[5] - Sqrt[6 (5 - 11/Sqrt[5])]))^(1/5)/2^( 2/5) - ((-1)^(1/5) (1 + 1/Sqrt[5] - 2 Sqrt[3/10 + 33/(50 Sqrt[5])])^(1/5))/2^( 2/5) - ((-1)^(3/5) (1 + 1/Sqrt[5] + 2 Sqrt[3/10 + 33/(50 Sqrt[5])])^(1/5))/2^(2/5), (-1)^(2/5)/( 2^(2/5) (5/(5 - Sqrt[5] - Sqrt[6 (5 - 11/Sqrt[5])]))^( 1/5)) - ((-1)^(3/5) (1/5 (5 - Sqrt[5] + Sqrt[6 (5 - 11/Sqrt[5])]))^(1/5))/2^( 2/5) + (1 + 1/Sqrt[5] - 2 Sqrt[3/10 + 33/(50 Sqrt[5])])^(1/5)/2^( 2/5) + ((-1)^(4/5) (1 + 1/Sqrt[5] + 2 Sqrt[3/10 + 33/(50 Sqrt[5])])^(1/5))/2^(2/5)} In[445]:= squint[-1 + 13755 x + 3740 x^2 + 1260 x^3 - 5 x^4 + x^5] Out[445]= {1 + 5 2^(1/5) - 10 2^(2/5) + 10 2^(3/5) - 5 2^(4/5), 1 + 5 (-1)^(4/5) 2^(1/5) + 10 (-1)^(3/5) 2^(2/5) + 10 (-1)^(2/5) 2^(3/5) + 5 (-1)^(1/5) 2^(4/5), 1 - 5 (-1)^(3/5) 2^(1/5) + 10 (-1)^(1/5) 2^(2/5) + 10 (-1)^(4/5) 2^(3/5) - 5 (-1)^(2/5) 2^(4/5), 1 + 5 (-1)^(2/5) 2^(1/5) - 10 (-1)^(4/5) 2^(2/5) - 10 (-1)^(1/5) 2^(3/5) + 5 (-1)^(3/5) 2^(4/5), 1 - 5 (-2)^(1/5) - 10 (-2)^(3/5) - 10 (-1)^(2/5) 2^(2/5) - 5 (-1)^(4/5) 2^(4/5)} (It can take Mathematica several minutes to check one of these symbolically.) Here is the definition: squint[q_] := ToRadicals[ Block[{rts = (#1[[1, 2]] & ) /@ NSolve[q == 0, WorkingPrecision -> 99], boa, foos}, foos = (InverseFourier[rts[[#1]]/Sqrt[5]]^5 & ) /@ Permutations[Range[5]]; foos = (Together[#1[[1, 2]]]^(1/5) & ) /@ Solve[0 == Rationalize[Expand[Times @@ (#1 - Rest[MinimalBy[foos, Denominator@Rationalize[Plus @@ #, 9.^-69] &,1][[1]]])]]]; boa = Rationalize@Mean@rts; boa + Union[(foos . #1 & ) /@ Select[Tuples[I^(4 Range@5/5), 4], MemberQ[Chop[#1 . foos + boa - rts], 0] & ]]]] One thing I remember is boa is "b over a", as in a x^5 + b x^4 + . . . note boa = Rationalize@Mean@rts; Something I don't remember is feeling any surprise that this works. It would be funny if it comes as a surprise to algebraists. Actually, it wouldn't be funny because then I'd have to publish something. That I don't remember. Replacing 5 by 7, 4 by 6, and Solve[0==. . .] with a sextic solver, Julian and I found the analogous septic solver. He expressed mistrust, but it has yet to fail. —rwg