Re: How to do quickest
- To: mathgroup at smc.vnet.net
- Subject: [mg123075] Re: How to do quickest
- From: Artur <grafix at csl.pl>
- Date: Tue, 22 Nov 2011 07:22:46 -0500 (EST)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- References: <201111210929.EAA14830@smc.vnet.net> <8FECCEBE-CBFE-4B7C-87A5-4856C65C2DB4@mimuw.edu.pl>
- Reply-to: grafix at csl.pl
Mathematical problem is described here: https://oeis.org/draft/A200656 Best wishes Artur W dniu 2011-11-22 10:06, Andrzej Kozlowski pisze: > On 21 Nov 2011, at 10:29, Artur wrote: > >> Dear Mathematica Gurus, >> How to do quickest following procedure (which is very slowly): >> >> qq = {}; Do[y = Round[Sqrt[x^3]]; >> If[(x^3 - y^2) != 0, >> kk = m /. Solve[{4 m^2 + 6 m n + n^2 == >> x, (19 m^2 + 9 m n + n^2) Sqrt[m^2 + n^2] == y}, {m, n}][[1]]; >> ll = CoefficientList[MinimalPolynomial[kk][[1]], #1]; >> lll = Length[ll]; >> If[lll< 12, Print[{x/(x^3 - y^2)^2, kk, x, y, x^3 - y^2}]; >> If[Length[ll] == 3, Print[{kk, x, y}]]]], {x, 2, 1000000}]; >> qq >> >> >> (*Best wishes Artur*) >> > I think it would be better to send not only the code but also the mathematical problem, as there may be a way to do it in a different way. Unless I am misunderstanding something, what you are trying to do is the same as this: > > In[31]:= Block[{y = Round[Sqrt[x^3]]}, > Reap[Table[ > If[(x^3 - y^2) != 0&& Not[IrreduciblePolynomialQ[poly]], > Sow[{x, y}]], {x, 2, 1000000}]][[2]]] // Timing > > Out[31]= {721.327,{}} > > This ought to be a lot faster than your code, but I have not tried to run yours to the end. Also, it is possible that using the Eisenstein Test explicitly may be somewhat faster: > > Block[{y = Round[Sqrt[x^3]]}, > Reap[Table[ > If[x^3 - y^2 != 0&& Mod[x^6 - 2*x^3*y^2 + y^4, 4] == 0&& > ! IrreduciblePolynomialQ[poly], Sow[{x, y}]], {x, 2, > 1000000}]][[2]]] > > {} > > but I forgot to use Timing and don't want to wait again, particularly that the answer is the empty set. > > Andrzej Kozlowski
- References:
- How to do quickest
- From: Artur <grafix@csl.pl>
- How to do quickest