John Cremona on Sun, 21 Jun 2009 14:09:00 +0200 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Re: Elliptic curve x^3 - y^2 = p |
As Karim said, the Magma and Sage solutions are much more sophisticated since they use a lot of elliptic curve theory to give a complete set of solutions. One very quick way of searching for solutions is to use Michael Stoll's stand-alone C program "ratpoints" which is a very fast quadratic sieve implementation which can search for rational solutions to y^2=f(x) where f is an integer polynomial (of any degree). For example: john@ubuntu%time ./ratpoints '-431 0 0 1' 1000000 -du 1 -q (1 : 0 : 0) (8 : 9 : 1) (8 : -9 : 1) (11 : 30 : 1) (11 : -30 : 1) (20 : 87 : 1) (20 : -87 : 1) (30 : 163 : 1) (30 : -163 : 1) (36 : 215 : 1) (36 : -215 : 1) (138 : 1621 : 1) (138 : -1621 : 1) (150 : 1837 : 1) (150 : -1837 : 1) (575 : 13788 : 1) (575 : -13788 : 1) (3903 : 243836 : 1) (3903 : -243836 : 1) real 0m0.005s user 0m0.000s sys 0m0.004s Note that this takes a very short time indeed, and finds all solutions with |x|<10^6. (The command line parameters are: the coefficients of f, the height bound, the denominator bound (=1 for integral points only) and -q for non-verbose output. The program can be obtained from http://www.mathe2.uni-bayreuth.de/stoll/programs/index.html, is free (GPL) and only requires gmp. John Cremona 2009/6/18 cino hilliard <hillcino368@hotmail.com>: > Hi Karim, > >> From: Karim.Belabas@math.u-bordeaux1.fr >> Date: Thu, 18 Jun 2009 14:12:36 +0200 >> To: pari-users@list.cr.yp.to >> Subject: Re: Elliptic curve x^3 - y^2 = p >> >> * cino hilliard [2009-06-18 12:35]: >> > (05:26:04) gp > ?diffcubes >> > >> > diffcubes(n,p)=local(x,y);setintersect(vector(n,x,x^3-p),vector(n,y,y^2)) >> > >> > >> > >> > getting this >> > >> > (05:20:04) gp > diffcubes(10000,431) >> > *** setintersect: not a set in setintersect. >> > also for ver 2.4.2 >> >> OK, that's for 2.4.3 only then :-(. >> >> (14:10) gp > ??setintersect >> setintersect(x,y): >> >> intersection of the two sets x and y (see setisset). The function also >> works >> if both x and y are vectors of stricly increasing entries ( according to < >> ); >> in that case we return a vector of strictly increasing entries, not a set. >> Otherwise, the result is undefined. > Oh boy. > I always get > > Could not find translation file, docdir='C:/Program Files/PARI' at > C:/Program > Files/PARI/gphelp line 152. > > with super help ?? > > >> For "older" versions than that, use >> >> setintersect(Set(vector(n,x,x^3-p)), Set(vector(n,y,y^2))) >> >> ( slower but not *much* slower... ) > > Bravo! > This does what I want. > > diffcubes(n,p) = > { > local(j,x,y,c); > a=eval(setintersect(Set(vector(n,x,x^3-p)), > Set(vector(n,y,y^2)))); > c=length(a); > a=vecsort(a); > for(j=1,c, > y=round(sqrt(a[j])); > x=round((a[j]+p)^(1/3)); > print(j": "x"^3 - "y"^2 = "p); \\ Too fancy? Change > it. > ); > c; > } > > > (14:51:50) gp > diffcubes(300000,431) > 1: 8^3 - 9^2 = 431 > 2: 11^3 - 30^2 = 431 > 3: 20^3 - 87^2 = 431 > 4: 30^3 - 163^2 = 431 > 5: 36^3 - 215^2 = 431 > 6: 138^3 - 1621^2 = 431 > 7: 150^3 - 1837^2 = 431 > 8: 575^3 - 13788^2 = 431 > 9: 3903^3 - 243836^2 = 431 > (15:02:35) gp > ## > *** last result computed in 2,250 ms. > (15:02:39) gp > > > This finds all instances because I new a prori 243836 was the big kahuna. > I guess it will still be trial and error? > > Oh well, we are at least 2 quanta over what I had. > > Thank you >>> > Cino > >