[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
setmod_ff
:: 有限体の設定, 設定されている有限体の法, 定義多項式の表示
数または多項式
素数
GF(2) 上既約な 1 変数多項式
GF(p) 上既約な 1 変数多項式
拡大次数
setmod_ff(defpoly,p)
で定義された
GF(p^n) の場合, [defpoly,p] を返す.
基礎体が setmod_ff(p,n)
で定義された
GF(p^n) の場合,
[p,defpoly,prim_elem] を返す. ここで, defpoly
は, n 次拡大の定義多項式, prim_elem は, GF(p^n)の
乗法群の生成元を意味する.
defpoly_mod2()
で生成するのがよい.
[174] defpoly_mod2(100); x^100+x^15+1 [175] setmod_ff(@@); x^100+x^15+1 [176] setmod_ff(); x^100+x^15+1 [177] setmod_ff(x^4+x+1,547); [1*x^4+1*x+1,547] [178] setmod_ff(2,5); [2,x^5+x^2+1,x]
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
field_type_ff
:: 設定されている基礎体の種類
整数
[0] field_type_ff(); 0 [1] setmod_ff(3); 3 [2] field_type_ff(); 1 [3] setmod_ff(x^2+x+1); x^2+x+1 [4] field_type_ff(); 2
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
field_order_ff
:: 設定されている基礎体の位数
整数
[0] field_order_ff(); field_order_ff : current_ff is not set return to toplevel [0] setmod_ff(3); 3 [1] field_order_ff(); 3 [2] setmod_ff(x^2+x+1); x^2+x+1 [3] field_order_ff(); 4
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
characteristic_ff
:: 設定されている体の標数
整数
[0] characteristic_ff(); characteristic_ff : current_ff is not set return to toplevel [0] setmod_ff(3); 3 [1] characteristic_ff(); 3 [2] setmod_ff(x^2+x+1); x^2+x+1 [3] characteristic_ff(); 2
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
extdeg_ff
:: 設定されている基礎体の, 素体に対する拡大次数
整数
[0] extdeg_ff(); extdeg_ff : current_ff is not set return to toplevel [0] setmod_ff(3); 3 [1] extdeg_ff(); 1 [2] setmod_ff(x^2+x+1); x^2+x+1 [3] extdeg_ff(); 2
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
simp_ff
:: 数, あるいは多項式の係数を有限体の元に変換
数または多項式
数または多項式
ptosfp()
を
用いる.
[0] simp_ff((x+1)^10); x^10+10*x^9+45*x^8+120*x^7+210*x^6+252*x^5+210*x^4+120*x^3+45*x^2+10*x+1 [1] setmod_ff(3); 3 [2] simp_ff((x+1)^10); 1*x^10+1*x^9+1*x+1 [3] ntype(coef(@@,10)); 6 [4] setmod_ff(2,3); [2,x^3+x+1,x] [5] simp_ff(1); @_0 [6] simp_ff(2); 0 [7] ptosfp(2); @_1
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
random_ff
:: 有限体の元の乱数生成
有限体の元
random()
, lrandom()
と同じ 32bit 乱数発生器を使用している.
[0] random_ff(); random_ff : current_ff is not set return to toplevel [0] setmod_ff(pari(nextprime,2^40)); 1099511627791 [1] random_ff(); 561856154357 [2] random_ff(); 45141628299
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
lmptop
:: GF(p) 係数多項式の係数を整数に変換
整数係数多項式
GF(p) 係数多項式
[0] setmod_ff(pari(nextprime,2^40)); 1099511627791 [1] F=simp_ff((x-1)^10); 1*x^10+1099511627781*x^9+45*x^8+1099511627671*x^7+210*x^6 +1099511627539*x^5+210*x^4+1099511627671*x^3+45*x^2+1099511627781*x+1 [2] setmod_ff(547); 547 [3] F=simp_ff((x-1)^10); 1*x^10+537*x^9+45*x^8+427*x^7+210*x^6+295*x^5+210*x^4+427*x^3 +45*x^2+537*x+1 [4] lmptop(F); x^10+537*x^9+45*x^8+427*x^7+210*x^6+295*x^5+210*x^4+427*x^3 +45*x^2+537*x+1 [5] lmptop(coef(F,1)); 537 [6] ntype(@@); 0
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
ntogf2n
:: 自然数を GF(2^n) の元に変換
GF(2^n) の元
非負整数
simp_ff()
を
適用する必要がある.
[1] setmod_ff(x^30+x+1); x^30+x+1 [2] N=ntogf2n(2^100); (@^100) [3] simp_ff(N); (@^13+@^12+@^11+@^10)
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
gf2nton
:: GF(2^n) の元を自然数に変換
非負整数
GF(2^n) の元
gf2nton
の逆変換である.
[1] setmod_ff(x^30+x+1); x^30+x+1 [2] N=gf2nton(2^100); (@^100) [3] simp_ff(N); (@^13+@^12+@^11+@^10) [4] gf2nton(N); 1267650600228229401496703205376 [5] gf2nton(simp_ff(N)); 15360
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
ptogf2n
:: 一変数多項式を GF(2^n) の元に変換
GF(2^n) の元
一変数多項式
@
を代入した結果と等しい.
[1] setmod_ff(x^30+x+1); x^30+x+1 [2] ptogf2n(x^100); (@^100)
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
gf2ntop
:: GF(2^n) の元を多項式に変換
一変数多項式
GF(2^n) の元
不定元
ptogf2n()
呼び出し
における引数の変数 (デフォルトは x
), 指定がある場合には
指定された不定元を変数とする多項式を返す.
[1] setmod_ff(x^30+x+1); x^30+x+1 [2] N=simp_ff(gf2ntop(2^100)); (@^13+@^12+@^11+@^10) [5] gf2ntop(N); [207] gf2ntop(N); x^13+x^12+x^11+x^10 [208] gf2ntop(N,t); t^13+t^12+t^11+t^10
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
ptosfp
, sfptop
:: 小標数有限体への変換, 逆変換
多項式
多項式
ptosfp()
は, 多項式の係数を, 現在設定されている小標数有限体
GF(p^n) の元に直接変換する. 係数が既に有限体の元の場合は変化しない.
正整数の場合, まず位数で剰余を計算したあと, 標数 p により p
進展開し, p を x に置き換えた多項式を, 原始元表現に変換する.
例えば, GF(3^5) は GF(3)[x]/(x^5+2*x+1) として表現され, その各
元は原始元 x に関するべき指数 k により @_k として
表示される. このとき, 例えば 23 = 2*3^2+3+2 は, 2*x^2+x+2
と表現され, これは結局 x^17 と法 x^5+2*x+1 で等しいので,
@_17 と変換される.
sfptop()
は ptosfp()
の逆変換である.
[196] setmod_ff(3,5); [3,x^5+2*x+1,x] [197] A = ptosfp(23); @_17 [198] 9*2+3+2; 23 [199] x^17-(2*x^2+x+2); x^17-2*x^2-x-2 [200] sremm(@,x^5+2*x+1,3); 0 [201] sfptop(A); 23
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
defpoly_mod2
:: GF(2) 上既約な一変数多項式の生成
多項式
正整数
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
sffctr
:: 多項式の小標数有限体上での既約分解
リスト
有限体上の 多項式
[0] setmod_ff(2,10); [2,x^10+x^3+1,x] [1] sffctr((z*y^3+z*y)*x^3+(y^5+y^3+z*y^2+z)*x^2+z^11*y*x+z^10*y^3+z^11); [[@_0,1],[@_0*z*y*x+@_0*y^3+@_0*z,1],[(@_0*y+@_0)*x+@_0*z^5,2]]
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
fctr_ff
:: 1 変数多項式の有限体上での既約分解
リスト
有限体上の 1 変数多項式
[178] setmod_ff(2^64-95); 18446744073709551521 [179] fctr_ff(x^5+x+1); [[1*x+14123390394564558010,1],[1*x+6782485570826905238,1], [1*x+15987612182027639793,1],[1*x^2+1*x+1,1]]
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
irredcheck_ff
:: 1 変数多項式の有限体上での既約判定
0|1
有限体上の 1 変数多項式
[178] setmod_ff(2^64-95); 18446744073709551521 [179] ] F=x^10+random_ff(); x^10+14687973587364016969 [180] irredcheck_ff(F); 1
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
randpoly_ff
:: 有限体上の 乱数係数 1 変数多項式の生成
多項式
正整数
不定元
random_ff()
により生成される.
[178] setmod_ff(2^64-95); 18446744073709551521 [179] ] F=x^10+random_ff(); [180] randpoly_ff(3,x); 17135261454578964298*x^2+4766826699653615429*x+18317369440429479651 [181] randpoly_ff(3,x); 7565988813172050604*x^2+7430075767279665339*x+4699662986224873544 [182] randpoly_ff(3,x); 10247781277095450395*x^2+10243690944992524936*x+4063829049268845492
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
ecm_add_ff
, ecm_sub_ff
, ecm_chsgn_ff
:: 楕円曲線上の点の加算, 減算, 逆元
ベクトルまたは 0
長さ 3 のベクトルまたは 0
長さ 2 のベクトル
[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
[ << ] | [ < ] | [上] | [ > ] | [ >> ] |
この文書は12月 21, 2024にtexi2html 5.0を用いて生成されました。