Google

Go to the first, previous, next, last section, table of contents.


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
参照
section setmod_ff


Go to the first, previous, next, last section, table of contents.