В
pari/gp нет функции деления рациональных точек эллиптических кривых. В
magma такая функция есть:
DivisionPoints(P,n).
Попробовал запрограммировать деления рациональной точки на 2 для кривых в форме [0,b,0,c,d]:
Код:
elldiv2(E, P)=
{
local(b, c, x1, y1, x2, y2, d, f, p, t);
b= E[2]; c= E[4]; x2= P[1]; y2= P[2]; d= [];
kill(x1); kill(y1);
f= factor((c-x1^2+2*x1*x2+2*x2*(b+x2))^2-4*(b+2*x1+x2)*y2^2);
for(i= 1, #f~,
p= f[i,][1];
if(#p==2,
x1= -polcoeff(p, 0)/polcoeff(p, 1);
y1= ellordinate(E, x1);
for(j= 1, #y1, d= concat(d, [[x1, y1[j]]]));
)
);
t= []; for(i= 1, #d, if(ellmul(E, d[i], 2)==P, t= concat(t, [d[i]])));
return(t)
};
Можно ли сделать этот код быстрее? Или может где есть готовый код деления рациональной точки на произвольное натуральное число?