\\ \\ fft.gp \\ \\ E: x^3+y^3=a*z^3 \\ P[x:y:z] \in E(Q) \\ [x:y:z]-->[x/z,y/z] eaf(p)= { local(x,y,z); x=p[1]; y=p[2]; z=p[3]; [x/z,y/z] } \\ -P eminus(p,a)= { local(x,y,z); x=p[1]; y=p[2]; z=p[3]; [y,x,z] } \\ 2P e2(p,a)= { local(x,y,z); x=p[1]; y=p[2]; z=p[3]; [-y*(x^3+a*z^3),x*(y^3+a*z^3),(x^3-y^3)*z] } e2af(p,a)= { local(x,y); x=p[1]; y=p[2]; eaf(e2([x,y,1],a)) } \\ P+Q eadd(p,q,a)= { local(x0,y0,z0,x1,y1,z1); x0=p[1]; y0=p[2]; z0=p[3]; x1=q[1]; y1=q[2]; z1=q[3]; [-(x0*x1*(x0*y1-x1*y0)+a*z0*z1*(y0*z1-y1*z0)), y0*y1*(x0*y1-x1*y0)+a*z0*z1*(z0*x1-z1*x0), x0*x1*(z0*x1-z1*x0)-y0*y1*(y0*z1-y1*z0)] } eaddaf(p,q,a)= { local(x,y,u,v); x=p[1]; y=p[2]; u=q[1]; v=q[2]; eaf(eadd([x,y,1],[u,v,1],a)) } e3(p,a)=eadd(e2(p,a),p,a); e3af(p,a)= { local(x,y); x=p[1]; y=p[2]; eaf(e3([x,y,1],a)) } e4(p,a)=e2(e2(p,a),a); e4af(p,a)= { local(x,y); x=p[1]; y=p[2]; eaf(e4([x,y,1],a)) } e5(p,a)=eadd(e3(p,a),e2(p,a),a); e5af(p,a)= { local(x,y); x=p[1]; y=p[2]; eaf(e5([x,y,1],a)) } e6(p,a)=e2(e3(p,a),a); e6af(p,a)= { local(x,y); x=p[1]; y=p[2]; eaf(e6([x,y,1],a)) } e7(p,a)=eadd(e4(p,a),e3(p,a),a); e7af(p,a)= { local(x,y); x=p[1]; y=p[2]; eaf(e7([x,y,1],a)) } e8(p,a)=e2(e4(p,a),a); e8af(p,a)= { local(x,y); x=p[1]; y=p[2]; eaf(e8([x,y,1],a)) } e2a(p)= { local(x,y,a); x=p[1]; y=p[2]; a=x^3+y^3; [-y*(x^3+a)/(x^3-y^3),x*(y^3+a)/(x^3-y^3)] } e2pa(p,n)= { local(q); q=p; if(n>0, for(j=1,n,q=e2a(q)) ); q } e2h(p)= { local(x,y); x=p[1]; y=p[2]; x+y }