\\ \\ de11.gp \\ \\ \\ C_a: au(u^2-1)=v(v^2-1) \\ \\ where a!=0,\pm{1} \\ \\ u_0=a^(1/3) is a real root of u^3-a=0 \\ ff(x)=x*(x^2-1); cc(a,u,v)=a*ff(u)-ff(v); u_0(a)= { local(u,v); u=a^(1/3); v=floor(u+0.0001); if(v^3==a,u=v); u } \\ \\ E_a: y^2=x^3-3*a^2*x+a^4+a^2 \\ \\ x_0 \\ is a real root of x^3-3a^2x+a^4+a^2=0 \\ x_0(a)=-u_0(a)^2-2*u_0(a); ee(a,x,y)=x^3-3*a^2*x+a^4+a^2-y^2; ec(a)=ellinit([0,0,0,-3*a^2,a^4+a^2]); \\ \\ f:E-->C \\ (x,y)-->(u,v) \\ u=(x-a^2)/y \\ v=a(x-1)/y \\ f([0:1:0])=[0,0] \\ f([1:u_0:0])=[x_0,0] \\ where [0]_C==[1:u_0:0] \\ [0]_E==[0:1:0] \\ u_0,x_0: both irrational. \\ f(a,p)= { local(x,y,u,v); if(p==[0],return([0,0])); x=p[1]; y=p[2]; if(y==0, return([1,u_0(a),0])); u=(x-a^2)/y; v=a*(x-1)/y; [u,v] } \\ \\ f^{-1}:C-->E \\ (u,v)-->(z,w) \\ x=a(u-2v)/(2u-v) \\ y=-a(a^2-1)/(2u-v) \\ f^{-1}([0:0])=[0:1:0] \\ f^{-1}([1:u_0:0])=[x_0,0] \\ where [0]_C==[1:u_0:0] \\ [0]_E==[0:1:0] \\ u_0,x_0: both irrational. \\ finv(a,p)= { local(x,y,u,v); \\ if a*u^3=v^3 then x=x_0,y=0 if(p==[0],return([x_0(a),0])); u=p[1]; v=p[2]; \\ if a*u==v then u=v=0 if(a*u==v, return([0])); x=a*(u-a*v)/(a*u-v); y=-a*(a^2-1)/(a*u-v); [x,y] } \\ \\ E_3: y^2=x^3-27x+90 \\ \\ E_3(Q)=Z^2 \\ generator p1=[3,6],p2=[9,24] \\ by mwrank3 -p 1000 -b 15 -c 16 \\ E_3(Q)_{tors}=0 \\ \\ \\E_8(Q)_{tors}=Z/2Z, t1=[-20,0] \\E_27(Q)_{tors}=Z/2Z, t1=[-90,0] \\E_64(Q)_{tors}=Z/2Z, t1=[-272,0] \\E_125(Q)_{tors}=Z/2Z, t1=[-650,0] \\E_216(Q)_{tors}=Z/2Z, t1=[-1332,0] \\ \\ \\ E_3: y^2=x^3-27x+90 \\ rank=2, p1=[3,6], p2=[9,24] \\ rpE3(m)=rpEr2(3,[3,6],[9,24],m); rpC3(m)=rpCr2(3,[3,6],[9,24],m); ipC3(m)=ipCr2(3,[3,6],[9,24],m); \\ \\ E_4: y^2=x^3-48x+272 \\ rank=1, p1=[16,60] \\ rpE4(m)=rpEr1(4,[16,60],m); rpC4(m)=rpCr1(4,[16,60],m); ipC4(m)=ipCr1(4,[16,60],m); \\ \\ E_5: y^2=x^3-75x+650 \\ rank=2, p1=[-11,12], p2=[65,520] \\ rpE5(m)=rpEr2(5,[-11,12],[65,520],m); rpC5(m)=rpCr2(5,[-11,12],[65,520],m); ipC5(m)=ipCr2(5,[-11,12],[65,520],m); \\ \\ E_6: y^2=x^3-108x+1332 \\ rank=2, p1=[-14,10], p2=[36,210] \\ rpE6(m)=rpEr2(6,[-14,10],[36,210],m); rpC6(m)=rpCr2(6,[-14,10],[36,210],m); ipC6(m)=ipCr2(6,[-14,10],[36,210],m); \\ \\ E_7: y^3=x^3-147x+2450 \\ rank=2, p1=[-17,6], p2=[49,336] \\ rpE7(m)=rpEr2(7,[-17,6],[49,336],m); rpC7(m)=rpCr2(7,[-17,6],[49,336],m); ipC7(m)=ipCr2(7,[-17,6],[49,336],m); \\ \\ E_8: y^2=x^3-192x+4160 \\ rank=1, p1=[-8,72], t1=[-20,0] \\ rpE8(m)=rpEr1t(8,[-8,72],[-20,0],m); rpC8(m)=rpCr1t(8,[-8,72],[-20,0],m); ipC8(m)=ipCr1t(8,[-8,72],[-20,0],m); \\ \\ E_9: y^2=x^3-243x+6642 \\ rank=2, p1=[81,720], p2=[31,170] \\ rpE9(m)=rpEr2(9,[81,720],[31,170],m); rpC9(m)=rpCr2(9,[81,720],[31,170],m); ipC9(m)=ipCr2(9,[81,720],[31,170],m); \\ \\ E_10: y^2=x^3-300x+10100 \\ rank=2, p1=[100,990], p2=[-26,18] \\ rpE10(m)=rpEr2(10,[100,990],[-26,18],m); rpC10(m)=rpCr2(10,[100,990],[-26,18],m); ipC10(m)=ipCr2(10,[100,990],[-26,18],m); \\ \\ E_11: y^2=x^3-363x+14762 \\ rank=2, p1=[517,11748], p2=[-809303/79507,10488390/79507] \\ rpE11(m)=rpEr2(11,[517,11748],[-809303/79507,10488390/79507],m); rpC11(m)=rpCr2(11,[517,11748],[-809303/79507,10488390/79507],m); ipC11(m)=ipCr2(11,[517,11748],[-809303/79507,10488390/79507],m); \\ \\ E_12: y^2=x^3-432x+20880 \\ rank=2, p1=[144,1716], p2=[-32,44] \\ rpE12(m)=rpEr2(12,[144,1716],[-32,44],m); rpC12(m)=rpCr2(12,[144,1716],[-32,44],m); ipC12(m)=ipCr2(12,[144,1716],[-32,44],m); \\ \\ E_13: y^2=x^3-507x+28730 \\ rank=3, p1=[169,2184], p2=[442,9282], p3=[419,8566] \\ rpE13(m)=rpEr3(13,[169,2184],[442,9282],[419,8566],m); rpC13(m)=rpCr3(13,[169,2184],[442,9282],[419,8566],m); ipC13(m)=ipCr3(13,[169,2184],[442,9282],[419,8566],m); \\ \\ E_14: y^2=x^3-588x+38612 \\ rank=2, p1=[196,2730], p2=[-38,78] \\ rpE14(m)=rpEr2(14,[196,2730],[-38,78],m); rpC14(m)=rpCr2(14,[196,2730],[-38,78],m); ipC14(m)=ipCr2(14,[196,2730],[-38,78],m); \\ \\ E_15: y^2=x^3-675x+50850 \\ rank=2, p1=[225,3360], p2=[-41,98] \\ rpE15(m)=rpEr2(15,[225,3360],[-41,98],m); rpC15(m)=rpCr2(15,[225,3360],[-41,98],m); ipC15(m)=ipCr2(15,[225,3360],[-41,98],m); \\ \\ E_16: y^2=x^3-768x+65792 \\ rank=2, p1=[256,4080], p2=[-16,272] \\ rpE16(m)=rpEr2(16,[256,4080],[-16,272],m); rpC16(m)=rpCr2(16,[256,4080],[-16,272],m); ipC16(m)=ipCr2(16,[256,4080],[-16,272],m); \\ \\ E_17: y^2=x^3-867x+83810 \\ rank=2, p1=[289,4896], p2=[-47,144] \\ rpE17(m)=rpEr2(17,[289,4896],[-47,144],m); rpC17(m)=rpCr2(17,[289,4896],[-47,144],m); ipC17(m)=ipCr2(17,[289,4896],[-47,144],m); \\ \\ E_18: y^2=x^3-972x+105300 \\ rank=3, p1=[324,5814], p2=[-942/27,8398/27], p3=[1548,60894] \\ rpE18(m)=rpEr3(18,[324,5814],[-942/27,8398/27],[1548,60894],m); rpC18(m)=rpCr3(18,[324,5814],[-942/27,8398/27],[1548,60894],m); ipC18(m)=ipCr3(18,[324,5814],[-942/27,8398/27],[1548,60894],m); \\ \\ E_19: y^2=x^3-1083x+130682 \\ rank=2, \\ p1= [115781619874268959407195720303277/346499416586250609538305723877,-2109882900598636247798822271762120/346499416586250609538305723877] \\ p2=[-125102299013/6321363049,2401817646330/6321363049] \\ rpE19(m)=rpEr2(19,[115781619874268959407195720303277/346499416586250609538305723877,-2109882900598636247798822271762120/346499416586250609538305723877],[-125102299013/6321363049,2401817646330/6321363049],m); rpC19(m)=rpCr2(19,[115781619874268959407195720303277/346499416586250609538305723877,-2109882900598636247798822271762120/346499416586250609538305723877],[-125102299013/6321363049,2401817646330/6321363049],m); ipC19(m)=ipCr2(19,[115781619874268959407195720303277/346499416586250609538305723877,-2109882900598636247798822271762120/346499416586250609538305723877],[-125102299013/6321363049,2401817646330/6321363049],m); \\ \\ E_20: y^2=x^3-1200x+160400 \\ rank=1, p1=[400,7980], p2=[-56,228] \\ rpE20(m)=rpEr2(20,[400,7980],[-56,228],m); rpC20(m)=rpCr2(20,[400,7980],[-56,228],m); ipC20(m)=ipCr2(20,[400,7980],[-56,228],m); \\ \\ print p if p is an integral point \\ printip(p)= { local(x,y); if(p==[0], print(p), \\ x=p[1]; y=p[2]; if(denominator(x)==1 && denominator(y)==1, print(p) ) ) } \\ \\ case rank(E_a)==3 \\ rpEr3(a,p1,p2,p3,m)= { local(e,p,q,r,u,v); e=ec(a); for(i=-m,m, p=ellpow(e,p1,i); for(j=-m,m, q=ellpow(e,p2,j); u=elladd(e,p,q); for(k=-m,m, r=ellpow(e,p3,k); v=elladd(e,u,r); \\ [i]p1+[j]p2+[k]p3 print([i,j,k],":",v) ) ) ) } rpCr3(a,p1,p2,p3,m)= { local(e,p,q,r,u,v); e=ec(a); for(i=-m,m, p=ellpow(e,p1,i); for(j=-m,m, q=ellpow(e,p2,j); u=elladd(e,p,q); for(k=-m,m, r=ellpow(e,p3,k); v=elladd(e,u,r); \\ [i]p1+[j]p2+[k]p3 print([i,j,k],":",f(a,v)) ) ) ) } ipCr3(a,p1,p2,p3,m)= { local(e,p,q,r,u,v); e=ec(a); for(i=-m,m, p=ellpow(e,p1,i); for(j=-m,m, q=ellpow(e,p2,j); u=elladd(e,p,q); for(k=-m,m, r=ellpow(e,p3,k); v=elladd(e,u,r); \\ [i]p1+[j]p2+[k]p3 \\ print1([i,j,k],":"); printip(f(a,v)) ) ) ) } rpCr3l(a,p1,p2,p3,m,limit)= { local(e,p,q,r,u,v); e=ec(a); for(i=-m,m, p=ellpow(e,p1,i); for(j=-m,m, q=ellpow(e,p2,j); u=elladd(e,p,q); for(k=-m,m, r=ellpow(e,p3,k); v=elladd(e,u,r); \\ [i]p1+[j]p2+[k]p3 if(ht(v)<=limit, print([i,j,k],":",f(a,v)) ) ) ) ) } \\ \\ case rank(E_a)==2 \\ rpEr2(a,p1,p2,m)= { local(e,p,q,r); e=ec(a); for(i=-m,m, p=ellpow(e,p1,i); for(j=-m,m, q=ellpow(e,p2,j); r=elladd(e,p,q); print([i,j],":",r) ) ) } rpCr2(a,p1,p2,m)= { local(e,p,q,r); e=ec(a); for(i=-m,m, p=ellpow(e,p1,i); for(j=-m,m, q=ellpow(e,p2,j); r=elladd(e,p,q); print([i,j],":",f(a,r)) ) ) } ipCr2(a,p1,p2,m)= { local(e,p,q,r); e=ec(a); for(i=-m,m, p=ellpow(e,p1,i); for(j=-m,m, q=ellpow(e,p2,j); r=elladd(e,p,q); \\ print([i,j],":"); printip(f(a,r)) ) ) } rpEr2t(a,p1,p2,t1,m)= { local(e,p,q,r); e=ec(a); for(i=-m,m, p=ellpow(e,p1,i); for(j=-m,m, q=ellpow(e,p2,j); r=elladd(e,p,q); print([i,j],":",r); r=elladd(e,r,t1); print([i,j,1],":",r) ) ) } rpCr2t(a,p1,p2,t1,m)= { local(e,p,q,r); e=ec(a); for(i=-m,m, p=ellpow(e,p1,i); for(j=-m,m, q=ellpow(e,p2,j); r=elladd(e,p,q); print([i,j],":",f(a,r)); r=elladd(e,r,t1); print([i,j,1],":",f(a,r)) ) ) } ipCr2t(a,p1,p2,t1,m)= { local(e,p,q,r); e=ec(a); for(i=-m,m, p=ellpow(e,p1,i); for(j=-m,m, q=ellpow(e,p2,j); r=elladd(e,p,q); \\ [i]p1+[j]p2 \\ print([i,j],":"); printip(f(a,r)); \\ [i]p1+[j]p2+t1 r=elladd(e,r,t1); \\ print([i,j,1],":"); printip(f(a,r)) ) ) } rpCr2l(a,p1,p2,m,limit)= { local(e,p,q,r); e=ec(a); for(i=-m,m, p=ellpow(e,p1,i); for(j=-m,m, q=ellpow(e,p2,j); r=elladd(e,p,q); if(ht(r)<=limit, print([i,j],":",f(a,r)) ) ) ) } \\ \\ case rank(E_a)==1 \\ rpEr1(a,p1,m)= { local(e,p,q); e=ec(a); print([0]); for(i=1,m, p=ellpow(e,p1,i); print(p); q=ellpow(e,p,-1); print(q) ) } rpCr1(a,p1,m)= { local(e,p,q); e=ec(a); print(f(a,[0])); for(i=1,m, p=ellpow(e,p1,i); print(f(a,p)); q=ellpow(e,p,-1); print(f(a,q)) ) } ipCr1(a,p1,m)= { local(e,p,q); e=ec(a); printip(f(a,[0])); for(i=1,m, p=ellpow(e,p1,i); printip(f(a,p)); q=ellpow(e,p,-1); printip(f(a,q)) ) } rpEr1t(a,p1,t1,m)= { local(e,p,q,r); e=ec(a); print([0]); for(i=1,m, p=ellpow(e,p1,i); print(p); r=elladd(e,p,t1); print(r); q=ellpow(e,p,-1); print(q); r=elladd(e,q,t1); print(r) ) } rpCr1t(a,p1,t1,m)= { local(e,p,q,r); e=ec(a); print(f(a,[0])); print(f(a,t1)); for(i=1,m, p=ellpow(e,p1,i); print(f(a,p)); r=elladd(e,p,t1); print(f(a,r)); q=ellpow(e,p,-1); print(f(a,q)); r=elladd(e,q,t1); print(f(a,r)) ) } ipCr1t(a,p1,t1,m)= { local(e,p,q,r); e=ec(a); printip(f(a,[0])); printip(f(a,t1)); for(i=1,m, p=ellpow(e,p1,i); printip(f(a,p)); r=elladd(e,p,t1); printip(f(a,r)); q=ellpow(e,p,-1); printip(f(a,q)); r=elladd(e,q,t1); printip(f(a,r)) ) } rpCr1l(a,p1,m,limit)= { local(e,p,q); e=ec(a); print(f(a,[0])); for(i=1,m, p=ellpow(e,p1,i); if(ht(p)<=limit, print(f(a,p)); q=ellpow(e,p,-1); print(f(a,q)) ) ) } \\ \\ find u,v \\ such that au(u^2-1)=v(v^2-1)mod n \\ findmod(a,n)= { local(c); c=0; for(i=0,n-1, for(j=0,n-1, if(cc(a,i,j)%n==0, print([i,j]); c++ ) ) ); c } ht(p)= { local(x,y,xn,xd); if(p==[0],return(0)); x=p[1]; y=p[2]; xn=abs(numerator(x)); xd=abs(denominator(x)); log(max(xn,xd)) }