`ecm_add_ff', `ecm_sub_ff', `ecm_chsgn_ff'
------------------------------------------

ecm_add_ff(P1,P2,EC)
ecm_sub_ff(P1,P2,EC)
ecm_chsgn_ff(P1)
     :: 楕円曲線上の点の加算, 減算, 逆元

RETURN
     ベクトルまたは 0

P1 P2
     長さ 3 のベクトルまたは 0

EC
     長さ 2 のベクトル

   * 現在設定されている有限体上で,  EC で定義される楕円曲線上の 点 P1,
     P2 の和 P1+P2, 差 P1-P2, 逆元 -P1 を返す.

   * EC は, 設定されている有限体が奇標数素体の場合,
     y^2=x^3+ec[0]x+ec[1], 標数 2 の場合 y^2+xy=x^3+ec[0]x^2+ec[1]
     を表す.

   * 引数, 結果ともに, 無限遠点は 0 で表される.

   * P1, P2 が長さ 3 のベクトルの場合, 斉次座標による曲線上の 点を表す.
     この場合, 第 3 座標は 0 であってはいけない.

   * 結果が長さ 3 のベクトルの場合, 第 3 座標は 0 でないが, 1
     とは限らない.  アフィン座標による結果を得るためには, 第 1 座標, 第
     2 座標を第 3 座標 で割る必要がある.

   * P1, P2 が楕円曲線上の点かどうかのチェックはしない.

     [0] setmod_ff(1125899906842679)$
     [1] EC=newvect(2,[ptolmp(1),ptolmp(1)])$
     [2] Pt1=newvect(3,[1,-412127497938252,1])$
     [3] Pt2=newvect(3,[6,-252647084363045,1])$
     [4] Pt3=ecm_add_ff(Pt1,Pt2,EC);
     [ 560137044461222 184453736165476 125 ]
     [5] F=y^2-(x^3+EC[0]*x+EC[1])$
     [6] subst(F,x,Pt3[0]/Pt3[2],y,Pt3[1]/Pt3[2]);
     0
     [7] ecm_add_ff(Pt3,ecm_chsgn_ff(Pt3),EC);
     0
     [8] D=ecm_sub_ff(Pt3,Pt2,EC);
     [ 886545905133065 119584559149586 886545905133065 ]
     [9] D[0]/D[2]==Pt1[0]/Pt1[2];
     1
     [10] D[1]/D[2]==Pt1[1]/Pt1[2];
     1

参照
     *Note `setmod_ff': setmod_ff

