Annotation of OpenXM/src/asir-doc/parts/ff.texi, Revision 1.2
1.2 ! noro 1: @comment $OpenXM$
! 2: \BJP
1.1 noro 3: @node $BM-8BBN$K4X$9$k1i;;(B,,, Top
4: @chapter $BM-8BBN$K4X$9$k1i;;(B
1.2 ! noro 5: \E
! 6: \BEG
! 7: @node Finite fields,,, Top
! 8: @chapter Finite fields
! 9: \E
1.1 noro 10:
11: @menu
1.2 ! noro 12: \BJP
1.1 noro 13: * $BM-8BBN$NI=8=$*$h$S1i;;(B::
14: * $BM-8BBN>e$G$N(B 1 $BJQ?tB?9`<0$N1i;;(B::
15: * $BM-8BBN>e$NBJ1_6J@~$K4X$9$k1i;;(B::
16: * $BM-8BBN$K4X$9$kH!?t$N$^$H$a(B::
1.2 ! noro 17: \E
! 18: \BEG
! 19: * Representation of finite fields::
! 20: * Univariate polynomials on finite fields::
! 21: * Elliptic curves on finite fields::
! 22: * Functions for Finite fields::
! 23: \E
1.1 noro 24: @end menu
25:
1.2 ! noro 26: \BJP
1.1 noro 27: @node $BM-8BBN$NI=8=$*$h$S1i;;(B,,, $BM-8BBN$K4X$9$k1i;;(B
28: @section $BM-8BBN$NI=8=$*$h$S1i;;(B
1.2 ! noro 29: \E
! 30: \BEG
! 31: @node Representation of finite fields,,, Finite fields
! 32: @section Representation of finite fields
! 33: \E
1.1 noro 34:
35: @noindent
1.2 ! noro 36: \BJP
1.1 noro 37: @b{Asir} $B$K$*$$$F$O(B, $BM-8BBN$O(B, $B@5I8?tAGBN(B GF(p), $BI8?t(B 2 $B$NM-8BBN(B GF(2^n)
38: $B$,Dj5A$G$-$k(B. $B$3$l$i$OA4$F(B, @code{setmod_ff()} $B$K$h$jDj5A$5$l$k(B.
1.2 ! noro 39: \E
! 40: \BEG
! 41: On @b{Asir} @var{GF(p)} and @var{GF(2^n)} can be defined, where
! 42: @var{GF(p)} is a finite prime field of charateristic @var{p} and
! 43: @var{GF(2^n)} is a finite field of characteristic 2. These are
! 44: all defined by @code{setmod_ff()}.
! 45: \E
1.1 noro 46:
47: @example
48: [0] P=pari(nextprime,2^50);
49: 1125899906842679
50: [1] setmod_ff(P);
51: 1125899906842679
52: [2] field_type_ff();
53: 1
54: [3] load("fff");
55: 1
56: [4] F=defpoly_mod2(50);
57: x^50+x^4+x^3+x^2+1
58: [5] setmod_ff(F);
59: x^50+x^4+x^3+x^2+1
60: [6] field_type_ff();
61: 2
62: @end example
1.2 ! noro 63: \BJP
1.1 noro 64: @code{setmod_ff()} $B$O(B, $B0z?t$,@5@0?t(B p $B$N>l9g(B GF(p), n $B<!B?9`<0(B f(x) $B$N>l(B
65: $B9g(B, f(x) mod 2 $B$rDj5AB?9`<0$H$9$k(B GF(2^n) $B$r$=$l$>$l4pACBN$H$7$F%;%C%H$9(B
66: $B$k(B. @code{setmod_ff()} $B$K$*$$$F$O0z?t$N4{Ls%A%'%C%/$O9T$o$:(B, $B8F$S=P$7B&(B
67: $B$,@UG$$r;}$D(B.
68:
69: $B4pACBN$H$O(B, $B$"$/$^$GM-8BBN$N85$H$7$F@k8@$"$k$$$ODj5A$5$l$?%*%V%8%'%/%H$,(B,
70: $B%;%C%H$5$l$?4pACBN$N1i;;$K=>$&$H$$$&0UL#$G$"$k(B. $BB($A(B, $BM-M}?t$I$&$7$N1i;;(B
71: $B$N7k2L$OM-M}?t$H$J$k(B. $BC"$7(B, $B;MB'1i;;$K$*$$$F0lJ}$N%*%Z%i%s%I$,M-8BBN$N85(B
72: $B$N>l9g$K$O(B, $BB>$N85$b<+F0E*$KF1$8M-8BBN$N85$H8+$J$5$l(B, $B1i;;7k2L$bF1MM$K$J(B
73: $B$k(B.
74:
75: 0 $B$G$J$$M-8BBN$N85$O(B, $B?t%*%V%8%'%/%H$G$"$j(B, $B<1JL;R$NCM$O(B 1 $B$G$"$k(B.
76: $B$5$i$K(B, 0 $B$G$J$$M-8BBN$N85$N?t<1JL;R$O(B, GF(p) $B$N>l9g(B 6, GF(2^n) $B$N>l9g(B 7
77: $B$H$J$k(B.
78:
79: $BM-8BBN$N85$NF~NOJ}K!$O(B, $BM-8BBN$N<oN`$K$h$jMM!9$G$"$k(B. GF(p) $B$N>l9g(B,
80: @code{simp_ff()} $B$K$h$k(B.
1.2 ! noro 81: \E
! 82:
! 83: \BEG
! 84: If @var{p} is a positive integer, @code{setmod_ff(@var{p})} sets
! 85: @var{GF(p)} as the current base field.
! 86: If @var{f} is a univariate polynomial of degree @var{n},
! 87: @code{setmod_ff(@var{f})} sets @var{GF(2^n)} as the current
! 88: base field. @var{GF(2^n)} is represented
! 89: as an algebraic extension of @var{GF(2)} with the defining polynomial
! 90: @var{f mod 2}. In both cases the primality check of the argument is
! 91: not done and the caller is responsible for it.
! 92:
! 93: Correctly speaking there is no actual object corresponding to a 'base field'.
! 94: Setting a base field means that operations on elements of finite fields
! 95: are done according to the arithmetics of the base field. Thus, if
! 96: operands of an arithmetic operation are both rational numbers, then the result
! 97: is also a rational number. However, if one of the operands is in
! 98: a finite field, then the other is automatically regarded as in the
! 99: same finite field and the operation is done in the finite field.
! 100:
! 101: A non zero element of a finite field belongs to the number and has object
! 102: identifier 1. Its number identifier is 6 if the finite field is @var{GF(p)},
! 103: 7 if it is @var{GF(2^n)}.
! 104:
! 105: There are several methods to input an element of a finite field.
! 106: An element of @var{GF(p)} can be input by @code{simp_ff()}.
! 107: \E
1.1 noro 108:
109: @example
110: [0] P=pari(nextprime,2^50);
111: 1125899906842679
112: [1] setmod_ff(P);
113: 1125899906842679
114: [2] A=simp_ff(2^100);
115: 3025
116: [3] ntype(@@@@);
117: 6
118: @end example
119:
1.2 ! noro 120: \JP $B$^$?(B, GF(2^n) $B$N>l9g$$$/$D$+$NJ}K!$,$"$k(B.
! 121: \EG In the case of @var{GF(2^n)} the following methods are available.
! 122:
1.1 noro 123: @example
124: [0] setmod_ff(x^50+x^4+x^3+x^2+1);
125: x^50+x^4+x^3+x^2+1
126: [1] A=@@;
127: (@@)
128: [2] ptogf2n(x^50+1);
129: (@@^50+1)
130: [3] simp_ff(@@@@);
131: (@@^4+@@^3+@@^2)
132: [4] ntogf2n(2^10-1);
133: (@@^9+@@^8+@@^7+@@^6+@@^5+@@^4+@@^3+@@^2+@@+1)
134: @end example
135:
1.2 ! noro 136: \BJP
1.1 noro 137: $BM-8BBN$N85$O?t$G$"$j(B, $BBN1i;;$,2DG=$G$"$k(B. @code{@@} $B$O(B
138: GF(2^n) $B$N(B, GF(2)$B>e$N@8@.85$G$"$k(B. $B>\$7$/$O(B @xref{$B?t$N7?(B}.
1.2 ! noro 139: \E
! 140: \BEG
! 141: Elements of finite fields are numbers and one can apply field arithmetics
! 142: to them. @code{@@} is a generator of @var{GF(2^n)} over @var{GF(2)}.
! 143: @xref{Types of numbers}.
! 144: \E
1.1 noro 145:
146: @noindent
147:
1.2 ! noro 148: \BJP
1.1 noro 149: @node $BM-8BBN>e$G$N(B 1 $BJQ?tB?9`<0$N1i;;(B,,, $BM-8BBN$K4X$9$k1i;;(B
150: @section $BM-8BBN>e$G$N(B 1 $BJQ?tB?9`<0$N1i;;(B
1.2 ! noro 151: \E
! 152: \BEG
! 153: @node Univariate polynomials on finite fields,,, Finite fields
! 154: @section Univariate polynomials on finite fields
! 155: \E
1.1 noro 156:
157: @noindent
1.2 ! noro 158: \BJP
1.1 noro 159: @samp{fff} $B$G$O(B, $BM-8BBN>e$N(B 1 $BJQ?tB?9`<0$KBP$7(B, $BL5J?J}J,2r(B, DDF, $B0x?tJ,2r(B,
160: $BB?9`<0$N4{LsH=Dj$J$I$N4X?t$,Dj5A$5$l$F$$$k(B.
161:
162: $B$$$:$l$b(B, $B7k2L$O(B [@b{$B0x;R(B}, @b{$B=EJ#EY(B}] $B$N%j%9%H$H$J$k$,(B, $B0x;R$O(B monic
163: $B$H$J$j(B, $BF~NOB?9`<0$N<g78?t$O<N$F$i$l$k(B.
164:
165: $BL5J?J}J,2r$O(B, $BB?9`<0$H$=$NHyJ,$H$N(B GCD $B$N7W;;$+$i;O$^$k$b$C$H$b0lHLE*$J(B
166: $B%"%k%4%j%:%`$r:NMQ$7$F$$$k(B.
167:
168: $BM-8BBN>e$G$N0x?tJ,2r$O(B, DDF $B$N8e(B, $B<!?tJL0x;R$NJ,2r$N:]$K(B, Berlekamp
169: $B%"%k%4%j%:%`$GNm6u4V$r5a$a(B, $B4pDl%Y%/%H%k$N:G>.B?9`<0$r5a$a(B, $B$=$N:,(B
170: $B$r(B Cantor-Zassenhaus $B%"%k%4%j%:%`$K$h$j5a$a$k(B, $B$H$$$&J}K!$r<BAu$7$F$$$k(B.
1.2 ! noro 171: \E
! 172: \BEG
! 173: In @samp{fff} square-free factorization, DDF (distinct degree factorization),
! 174: irreducible factorization and primality check are implemented for
! 175: univariate polynomials over finite fields.
! 176:
! 177: Factorizers return lists of [@b{factor},@b{multiplicity}]. The factor
! 178: part is monic and the information on the leading coefficient of the
! 179: input polynomial is abandoned.
! 180:
! 181: The algorithm used in square-free factorization is the most primitive one.
! 182:
! 183: The irreducible factorization proceeds as follows.
1.1 noro 184:
1.2 ! noro 185: @enumerate
! 186: @item DDF
! 187: @item Nullspace computation by Berlekamp algorithm
! 188: @item Root finding of minimal polynomials of bases of the nullspace
! 189: @item Separation of irreducible factors by the roots
! 190: @end enumerate
! 191: \E
1.1 noro 192:
1.2 ! noro 193: \BJP
1.1 noro 194: @node $BM-8BBN>e$NBJ1_6J@~$K4X$9$k1i;;(B,,, $BM-8BBN$K4X$9$k1i;;(B
195: @section $BM-8BBN>e$NBJ1_6J@~$K4X$9$k1i;;(B
1.2 ! noro 196: \E
! 197: \BEG
! 198: @node Elliptic curves on finite fields,,, Finite fields
! 199: @section Elliptic curves on finite fields
! 200: \E
1.1 noro 201:
1.2 ! noro 202: \BJP
1.1 noro 203: $BM-8BBN>e$NBJ1_6J@~$K4X$9$k$$$/$D$+$N4pK\E*$J1i;;$,(B, $BAH$_9~$_4X?t$H$7$F(B
204: $BDs6!$5$l$F$$$k(B.
205:
206: $BBJ1_6J@~$N;XDj$O(B, $BD9$5(B 2 $B$N%Y%/%H%k(B @var{[a b]} $B$G9T$&(B. @var{a}, @var{b}
207: $B$OM-8BBN$N85$G(B,
208: @code{setmod_ff} $B$GDj5A$5$l$F$$$kM-8BBN$,AGBN$N>l9g(B, @var{y^2=x^3+ax+b},
209: $BI8?t(B 2 $B$NBN$N>l9g(B @var{y^2+xy=x^3+ax^2+b} $B$rI=$9(B.
210:
211: $BBJ1_6J@~>e$NE@$O(B, $BL58B1sE@$b9~$a$F2CK!72$r$J$9(B. $B$3$N1i;;$K4X$7$F(B, $B2C;;(B
212: (@code{ecm_add_ff()}), $B8:;;(B (@code{ecm_sub_ff()}) $B$*$h$S5U857W;;$N$?$a$N(B
213: $B4X?t(B (@code{ecm_chsgn_ff()}) $B$,Ds6!$5$l$F$$$k(B. $BCm0U$9$Y$-$O(B, $B1i;;$NBP>](B
214: $B$H$J$kE@$NI=8=$,(B,
215:
216: @itemize @bullet
217: @item $BL58B1sE@$O(B 0.
218: @item $B$=$l0J30$NE@$O(B, $BD9$5(B 3 $B$N%Y%/%H%k(B @var{[x y z]}. $B$?$@$7(B, @var{z} $B$O(B
219: 0 $B$G$J$$(B.
220: @end itemize
221:
222: $B$H$$$&E@$G$"$k(B. @var{[x y z]} $B$O@F<!:BI8$K$h$kI=8=$G$"$j(B, $B%"%U%#%s:BI8(B
223: $B$G$O(B @var{[x/z y/z]} $B$J$kE@$rI=$9(B. $B$h$C$F(B, $B%"%U%#%s:BI8(B @var{[x y]} $B$G(B
224: $BI=8=$5$l$?E@$r1i;;BP>]$H$9$k$K$O(B, @var{[x y 1]} $B$J$k%Y%/%H%k$r(B
225: $B@8@.$9$kI,MW$,$"$k(B.
226: $B1i;;7k2L$b@F<!:BI8$GF@$i$l$k$,(B, @var{z} $B:BI8$,(B 1 $B$H$O8B$i$J$$$?$a(B,
227: $B%"%U%#%s:BI8$r5a$a$k$?$a$K$O(B @var{x}, @var{y} $B:BI8$r(B @var{z} $B:BI8$G(B
228: $B3d$kI,MW$,$"$k(B.
1.2 ! noro 229: \E
! 230:
! 231: \BEG
! 232: Several fundamental operations on elliptic curves over finite fields
! 233: are provided as built-in functions.
! 234:
! 235: An elliptic curve is specified by a vector @var{[a b]} of length 2,
! 236: where @var{a}, @var{b} are elements of finite fields.
! 237: If the current base field is a prime field, then @var{[a b]} represents
! 238: @var{y^2=x^3+ax+b}. If the current base field is a finite field of
! 239: characteristic 2, then @var{[a b]} represents @var{y^2+xy=x^3+ax^2+b}.
! 240:
! 241: Points on an elliptic curve together with the point at infinity
! 242: forms an additive group. The addition, the subtraction and the
! 243: additive inverse operation are provided as @code{ecm_add_ff()},
! 244: @code{ecm_sub_ff()} and @code{ecm_chsgn_ff()} respectively.
! 245: Here the representation of points are as follows.
! 246:
! 247: @itemize @bullet
! 248: @item 0 denotes the point at infinity.
! 249: @item The other points are represented by vectors @var{[x y z]} of
! 250: length 3 with non-zero @var{z}.
! 251: @end itemize
! 252:
! 253: @var{[x y z]} represents a projective coordinate and
! 254: it corresponds to @var{[x/z y/z]} in the affine coordinate.
! 255: To apply the above operations to a point @var{[x y]},
! 256: @var{[x y 1]} should be used instead as an argument.
! 257: The result of an operation is also represented by the projective
! 258: coordinate. As the third coordinate is not always equal to 1,
! 259: one has to divide the first and the scond coordinate by the third
! 260: one to obtain the affine coordinate.
! 261: \E
1.1 noro 262:
1.2 ! noro 263: \BJP
1.1 noro 264: @node $BM-8BBN$K4X$9$kH!?t$N$^$H$a(B,,, $BM-8BBN$K4X$9$k1i;;(B
265: @section $BM-8BBN$K4X$9$kH!?t$N$^$H$a(B
1.2 ! noro 266: \E
! 267: \BEG
! 268: @node Functions for Finite fields,,, Finite fields
! 269: @section Functions for Finite fields
! 270: \E
1.1 noro 271:
272: @menu
273: * setmod_ff::
274: * field_type_ff::
275: * field_order_ff::
276: * characteristic_ff::
277: * extdeg_ff::
278: * simp_ff::
279: * random_ff::
280: * lmptop::
281: * ntogf2n::
282: * gf2nton::
283: * ptogf2n::
284: * gf2ntop::
285: * defpoly_mod2::
286: * fctr_ff::
287: * irredcheck_ff::
288: * randpoly_ff::
289: * ecm_add_ff ecm_sub_ff ecm_chsgn_ff::
290: * extdeg_ff::
291: @end menu
292:
1.2 ! noro 293: \JP @node setmod_ff,,, $BM-8BBN$K4X$9$kH!?t$N$^$H$a(B
! 294: \EG @node setmod_ff,,, Functions for Finite fields
1.1 noro 295: @subsection @code{setmod_ff}
296: @findex setmod_ff
297:
298: @table @t
299: @item setmod_ff([@var{prime}|@var{poly}])
1.2 ! noro 300: \JP :: $BM-8BBN$N@_Dj(B, $B@_Dj$5$l$F$$$kM-8BBN$NK!(B, $BDj5AB?9`<0$NI=<((B
! 301: \EG :: Sets/Gets the current base fields.
1.1 noro 302: @end table
303:
304: @table @var
305: @item return
1.2 ! noro 306: \JP $B?t$^$?$OB?9`<0(B
! 307: \EG number or polynomial
1.1 noro 308: @item prime
1.2 ! noro 309: \JP $BAG?t(B
! 310: \EG prime
1.1 noro 311: @item poly
1.2 ! noro 312: \JP GF(2) $B>e4{Ls$J(B 1 $BJQ?tB?9`<0(B
! 313: \EG univariate polynomial irreducible over GF(2)
1.1 noro 314: @end table
315:
316: @itemize @bullet
1.2 ! noro 317: \BJP
1.1 noro 318: @item
319: $B0z?t$,@5@0?t(B @var{prime} $B$N;~(B, GF(@var{prime}) $B$r4pACBN$H$7$F@_Dj$9$k(B.
320: @item
321: $B0z?t$,B?9`<0(B @var{poly} $B$N;~(B,
1.2 ! noro 322: GF(2^deg(@var{poly} mod 2)) = GF(2)[t]/(@var{poly}(t) mod 2)
1.1 noro 323: $B$r4pACBN$H$7$F@_Dj$9$k(B.
324: @item
325: $BL50z?t$N;~(B, $B@_Dj$5$l$F$$$k4pACBN$,(B GF(@var{prime}) $B$N>l9g(B @var{prime},
326: GF(2^n) $B$N>l9gDj5AB?9`<0$rJV$9(B.
327: @item
328: GF(2^n) $B$NDj5AB?9`<0$O(B, GF(2) $B>e(B n $B<!4{Ls$J$i$J$s$G$bNI$$$,(B, $B8zN($K(B
329: $B1F6A$9$k$?$a(B, @code{defpoly_mod2()} $B$G@8@.$9$k$N$,$h$$(B.
1.2 ! noro 330: \E
! 331: \BEG
! 332: @item
! 333: If the argument is a non-negative integer @var{prime}, GF(@var{prime})
! 334: is set as the current base field.
! 335: @item
! 336: If the argument is a polynomial @var{poly},
! 337: GF(2^deg(@var{poly} mod 2)) = GF(2)[t]/(@var{poly}(t) mod2)
! 338: is set as the current base field.
! 339: @item
! 340: If no argument is specified, the modulus indicating the current base field
! 341: is returned. If the current base field is GF(@var{prime}), @var{prime} is
! 342: returned. If it is GF(2^n), the defining polynomial is returned.
! 343: @item
! 344: Any irreducible univariate polynomial over GF(2) is available to
! 345: set GF(2^n). However the use of @code{defpoly_mod2()} is recommended
! 346: for efficiency.
! 347: \E
1.1 noro 348: @end itemize
349:
350: @example
351: [174] defpoly_mod2(100);
352: x^100+x^15+1
353: [175] setmod_ff(@@@@);
354: x^100+x^15+1
355: [176] setmod_ff();
356: x^100+x^15+1
357: @end example
358:
359: @table @t
1.2 ! noro 360: \JP @item $B;2>H(B
! 361: \EG @item References
1.1 noro 362: @fref{defpoly_mod2}
363: @end table
364:
1.2 ! noro 365: \JP @node field_type_ff,,, $BM-8BBN$K4X$9$kH!?t$N$^$H$a(B
! 366: \EG @node field_type_ff,,, Functions for Finite fields
1.1 noro 367: @subsection @code{field_type_ff}
368: @findex field_type_ff
369:
370: @table @t
371: @item field_type_ff()
1.2 ! noro 372: \JP :: $B@_Dj$5$l$F$$$k4pACBN$N<oN`(B
! 373: \EG :: Type of the current base field.
1.1 noro 374: @end table
375:
376: @table @var
377: @item return
1.2 ! noro 378: \JP $B@0?t(B
! 379: \EG integer
1.1 noro 380: @end table
381:
382: @itemize @bullet
1.2 ! noro 383: \BJP
1.1 noro 384: @item
385: $B@_Dj$5$l$F$$$k4pACBN$N<oN`$rJV$9(B.
386: @item
387: $B@_Dj$J$7$J$i(B 0, GF(p) $B$J$i(B 1, GF(2^n) $B$J$i(B 2 $B$rJV$9(B.
1.2 ! noro 388: \E
! 389: \BEG
! 390: @item
! 391: Returns the type of the current base field.
! 392: @item
! 393: If no field is set, 0 is returned. If GF(p) is set, 1 is returned.
! 394: If GF(2^n) is set, 2 is returned.
! 395: \E
1.1 noro 396: @end itemize
397:
398: @example
399: [0] field_type_ff();
400: 0
401: [1] setmod_ff(3);
402: 3
403: [2] field_type_ff();
404: 1
405: [3] setmod_ff(x^2+x+1);
406: x^2+x+1
407: [4] field_type_ff();
408: 2
409: @end example
410:
411: @table @t
1.2 ! noro 412: \JP @item $B;2>H(B
! 413: \EG @item References
1.1 noro 414: @fref{setmod_ff}
415: @end table
416:
1.2 ! noro 417: \JP @node field_order_ff,,, $BM-8BBN$K4X$9$kH!?t$N$^$H$a(B
! 418: \EG @node field_order_ff,,, Functions for Finite fields
1.1 noro 419: @subsection @code{field_order_ff}
420: @findex field_order_ff
421:
422: @table @t
423: @item field_order_ff()
1.2 ! noro 424: \JP :: $B@_Dj$5$l$F$$$k4pACBN$N0L?t(B
! 425: \EG :: Order of the current base field.
1.1 noro 426: @end table
427:
428: @table @var
429: @item return
1.2 ! noro 430: \JP $B@0?t(B
! 431: \EG integer
1.1 noro 432: @end table
433:
434: @itemize @bullet
1.2 ! noro 435: \BJP
1.1 noro 436: @item
437: $B@_Dj$5$l$F$$$k4pACBN$N0L?t(B ($B85$N8D?t(B) $B$rJV$9(B.
438: @item
439: $B@_Dj$5$l$F$$$kBN$,(B GF(q) $B$J$i$P(B q $B$rJV$9(B.
1.2 ! noro 440: \E
! 441: \BEG
! 442: @item
! 443: Returns the order of the current base field.
! 444: @item
! 445: @var{q} is returned if the current base field is GF(q).
! 446: \E
1.1 noro 447: @end itemize
448:
449: @example
450: [0] field_order_ff();
451: field_order_ff : current_ff is not set
452: return to toplevel
453: [0] setmod_ff(3);
454: 3
455: [1] field_order_ff();
456: 3
457: [2] setmod_ff(x^2+x+1);
458: x^2+x+1
459: [3] field_order_ff();
460: 4
461: @end example
462:
463: @table @t
1.2 ! noro 464: \JP @item $B;2>H(B
! 465: \EG @item References
1.1 noro 466: @fref{setmod_ff}
467: @end table
468:
1.2 ! noro 469: \JP @node characteristic_ff,,, $BM-8BBN$K4X$9$kH!?t$N$^$H$a(B
! 470: \EG @node characteristic_ff,,, Functions for Finite fields
1.1 noro 471: @subsection @code{characteristic_ff}
472: @findex characteristic_ff
473:
474: @table @t
475: @item characteristic_ff()
1.2 ! noro 476: \JP :: $B@_Dj$5$l$F$$$kBN$NI8?t(B
! 477: \EG :: Characteristic of the current base field.
1.1 noro 478: @end table
479:
480: @table @var
481: @item return
1.2 ! noro 482: \JP $B@0?t(B
! 483: \EG integer
1.1 noro 484: @end table
485:
486: @itemize @bullet
1.2 ! noro 487: \BJP
1.1 noro 488: @item
489: $B@_Dj$5$l$F$$$kBN$NI8?t$rJV$9(B.
490: @item
491: GF(p) $B$N>l9g(B p, GF(2^n) $B$N>l9g(B 2 $B$rJV$9(B.
1.2 ! noro 492: \E
! 493: \BEG
! 494: @item
! 495: Returns the characteristic of the current base field.
! 496: @item
! 497: @var{p} is returned if @var{GF(p)}, where @var{p} is a prime, is set.
! 498: @var{2} is returned if @var{GF(2^n)} is set.
! 499: \E
1.1 noro 500: @end itemize
501:
502: @example
503: [0] characteristic_ff();
504: characteristic_ff : current_ff is not set
505: return to toplevel
506: [0] setmod_ff(3);
507: 3
508: [1] characteristic_ff();
509: 3
510: [2] setmod_ff(x^2+x+1);
511: x^2+x+1
512: [3] characteristic_ff();
513: 2
514: @end example
515:
516: @table @t
1.2 ! noro 517: \JP @item $B;2>H(B
! 518: \EG @item References
1.1 noro 519: @fref{setmod_ff}
520: @end table
521:
1.2 ! noro 522: \JP @node extdeg_ff,,, $BM-8BBN$K4X$9$kH!?t$N$^$H$a(B
! 523: \EG @node extdeg_ff,,, Functions for Finite fields
1.1 noro 524: @subsection @code{extdeg_ff}
525: @findex extdeg_ff
526:
527: @table @t
528: @item extdeg_ff()
1.2 ! noro 529: \JP :: $B@_Dj$5$l$F$$$k4pACBN$N(B, $BAGBN$KBP$9$k3HBg<!?t(B
! 530: \EG :: Extension degree of the current base field over the prime field.
1.1 noro 531: @end table
532:
533: @table @var
534: @item return
1.2 ! noro 535: \JP $B@0?t(B
! 536: \EG integer
1.1 noro 537: @end table
538:
539: @itemize @bullet
1.2 ! noro 540: \BJP
1.1 noro 541: @item
542: $B@_Dj$5$l$F$$$k4pACBN$N(B, $BAGBN$KBP$9$k3HBg<!?t$rJV$9(B.
543: @item
544: GF(p) $B$N>l9g(B 1, GF(2^n) $B$N>l9g(B n $B$rJV$9(B.
1.2 ! noro 545: \E
! 546: \BEG
! 547: @item
! 548: Returns the extension degree of the current base field over the prime field.
! 549: @item
! 550: GF(p) $B$N>l9g(B 1, GF(2^n) $B$N>l9g(B n $B$rJV$9(B.
! 551: 1 is returned if @var{GF(p)}, where @var{p} is a prime, is set.
! 552: @var{n} is returned if @var{GF(2^n)} is set.
! 553: \E
1.1 noro 554: @end itemize
555:
556: @example
557: [0] extdeg_ff();
558: extdeg_ff : current_ff is not set
559: return to toplevel
560: [0] setmod_ff(3);
561: 3
562: [1] extdeg_ff();
563: 1
564: [2] setmod_ff(x^2+x+1);
565: x^2+x+1
566: [3] extdeg_ff();
567: 2
568: @end example
569:
570: @table @t
1.2 ! noro 571: \JP @item $B;2>H(B
! 572: \EG @item References
1.1 noro 573: @fref{setmod_ff}
574: @end table
575:
1.2 ! noro 576: \JP @node simp_ff,,, $BM-8BBN$K4X$9$kH!?t$N$^$H$a(B
! 577: \EG @node simp_ff,,, Functions for Finite fields
1.1 noro 578: @subsection @code{simp_ff}
579: @findex simp_ff
580:
581: @table @t
582: @item simp_ff(@var{obj})
1.2 ! noro 583: \JP :: $B?t(B, $B$"$k$$$OB?9`<0$N78?t$rM-8BBN$N85$KJQ49(B
! 584: \BEG
! 585: :: Converts numbers or coefficients of polynomials into elements
! 586: in finite fields.
! 587: \E
1.1 noro 588: @end table
589:
590: @table @var
591: @item return
1.2 ! noro 592: \JP $B?t$^$?$OB?9`<0(B
! 593: \EG number or polynomial
1.1 noro 594: @item obj
1.2 ! noro 595: \JP $B?t$^$?$OB?9`<0(B
! 596: \EG number or polynomial
1.1 noro 597: @end table
598:
599: @itemize @bullet
1.2 ! noro 600: \BJP
1.1 noro 601: @item
602: $B?t(B, $B$"$k$$$OB?9`<0$N78?t$rM-8BBN$N85$KJQ49$9$k(B.
603: @item
604: $B@0?t(B, $B$"$k$$$O@0?t78?tB?9`<0$r(B, $BM-8BBN(B, $B$"$k$$$OM-8BBN78?t$KJQ49$9$k$?$a$K(B
605: $BMQ$$$k(B.
606: @item
607: $BM-8BBN$N85$KBP$7(B, $BK!$"$k$$$ODj5AB?9`<0$K$h$k(B reduction $B$r9T$&>l9g$K$b(B
608: $BMQ$$$k(B.
1.2 ! noro 609: \E
! 610: \BEG
! 611: @item
! 612: Converts numbers or coefficients of polynomials into elements in finite
! 613: fields.
! 614: @item
! 615: It is used to convert integers or intrgral polynomials int
! 616: elements of finite fields or polynomials over finite fields.
! 617: @item
! 618: An element of a finite field may not have the reduced representation.
! 619: In such case an application of @code{simp_ff} assures the output has
! 620: the reduced representation.
! 621: \E
1.1 noro 622: @end itemize
623:
624: @example
625: [0] simp_ff((x+1)^10);
626: 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
627: [1] setmod_ff(3);
628: 3
629: [2] simp_ff((x+1)^10);
630: 1*x^10+1*x^9+1*x+1
631: [3] ntype(coef(@@@@,10));
632: 6
633: @end example
634:
635: @table @t
1.2 ! noro 636: \JP @item $B;2>H(B
! 637: \EG @item References
1.1 noro 638: @fref{setmod_ff}, @fref{lmptop}, @fref{gf2nton}
639: @end table
640:
1.2 ! noro 641: \JP @node random_ff,,, $BM-8BBN$K4X$9$kH!?t$N$^$H$a(B
! 642: \EG @node random_ff,,, Functions for Finite fields
1.1 noro 643: @subsection @code{random_ff}
644: @findex random_ff
645:
646: @table @t
647: @item random_ff()
1.2 ! noro 648: \JP :: $BM-8BBN$N85$NMp?t@8@.(B
! 649: \EG :: Random generation of an element of a finite field.
1.1 noro 650: @end table
651:
652: @table @var
653: @item return
1.2 ! noro 654: \JP $BM-8BBN$N85(B
! 655: \EG element of a finite field
1.1 noro 656: @end table
657:
658: @itemize @bullet
1.2 ! noro 659: \BJP
1.1 noro 660: @item
661: $BM-8BBN$N85$rMp?t@8@.$9$k(B.
662: @item
1.2 ! noro 663: @code{random()}, @code{lrandom()} $B$HF1$8(B 32bit $BMp?tH/@84o$r;HMQ$7$F$$$k(B.
! 664: \E
! 665: \BEG
! 666: @item
! 667: Generates an element of the current base field randomly.
1.1 noro 668: @item
1.2 ! noro 669: The same random generator as in @code{random()}, @code{lrandom()}
! 670: is used.
! 671: \E
1.1 noro 672: @end itemize
673:
674: @example
675: [0] random_ff();
676: random_ff : current_ff is not set
677: return to toplevel
678: [0] setmod_ff(pari(nextprime,2^40));
679: 1099511627791
680: [1] random_ff();
681: 561856154357
682: [2] random_ff();
683: 45141628299
684: @end example
685:
686: @table @t
1.2 ! noro 687: \JP @item $B;2>H(B
! 688: \EG @item References
1.1 noro 689: @fref{setmod_ff}, @fref{random}, @fref{lrandom}
690: @end table
691:
1.2 ! noro 692: \JP @node lmptop,,, $BM-8BBN$K4X$9$kH!?t$N$^$H$a(B
! 693: \EG @node lmptop,,, Functions for Finite fields
1.1 noro 694: @subsection @code{lmptop}
695: @findex lmptop
696:
697: @table @t
698: @item lmptop(@var{obj})
1.2 ! noro 699: \JP :: GF(p) $B78?tB?9`<0$N78?t$r@0?t$KJQ49(B
! 700: \EG :: Converts the coefficients of a polynomial over GF(p) into integers.
1.1 noro 701: @end table
702:
703: @table @var
704: @item return
1.2 ! noro 705: \JP $B@0?t78?tB?9`<0(B
! 706: \EG integral polynomial
1.1 noro 707: @item obj
1.2 ! noro 708: \JP GF(p) $B78?tB?9`<0(B
! 709: \EG polynomial over GF(p)
1.1 noro 710: @end table
711:
712: @itemize @bullet
1.2 ! noro 713: \BJP
1.1 noro 714: @item
715: GF(p) $B78?tB?9`<0$N78?t$r@0?t$KJQ49$9$k(B.
716: @item
717: GF(p) $B$N85$O(B, 0 $B0J>e(B p $BL$K~$N@0?t$GI=8=$5$l$F$$$k(B.
718: $BB?9`<0$N3F78?t$O(B, $B$=$NCM$r@0?t%*%V%8%'%/%H(B($B?t<1JL;R(B 0)$B$H$7$?$b$N$K(B
719: $BJQ49$5$l$k(B.
1.2 ! noro 720: \E
! 721: \BEG
! 722: @item
! 723: Converts the coefficients of a polynomial over GF(p) into integers.
1.1 noro 724: @item
1.2 ! noro 725: An element of GF(p) is represented by a non-negative integer @var{r} less than
! 726: @var{p}.
! 727: Each coefficient of a polynomial is converted into an integer object
! 728: whose value is @var{r}.
! 729: \E
1.1 noro 730: @end itemize
731:
732: @example
733: [0] setmod_ff(pari(nextprime,2^40));
734: 1099511627791
735: [1] F=simp_ff((x-1)^10);
736: 1*x^10+1099511627781*x^9+45*x^8+1099511627671*x^7+210*x^6
737: +1099511627539*x^5+210*x^4+1099511627671*x^3+45*x^2+1099511627781*x+1
738: [2] setmod_ff(547);
739: 547
740: [3] F=simp_ff((x-1)^10);
741: 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
742: [4] lmptop(F);
743: 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
744: [5] lmptop(coef(F,1));
745: 537
746: [6] ntype(@@@@);
747: 0
748: @end example
749:
750: @table @t
1.2 ! noro 751: \JP @item $B;2>H(B
! 752: \EG @item References
1.1 noro 753: @fref{simp_ff}
754: @end table
755:
1.2 ! noro 756: \JP @node ntogf2n,,, $BM-8BBN$K4X$9$kH!?t$N$^$H$a(B
! 757: \EG @node ntogf2n,,, Functions for Finite fields
1.1 noro 758: @subsection @code{ntogf2n}
759: @findex ntogf2n
760:
761: @table @t
762: @item ntogf2n(@var{m})
1.2 ! noro 763: \JP :: $B<+A3?t$r(B GF(2^n) $B$N85$KJQ49(B
! 764: \EG :: Converts a non-negative integer into an element of GF(2^n).
1.1 noro 765: @end table
766:
767: @table @var
768: @item return
1.2 ! noro 769: \JP GF(2^n) $B$N85(B
! 770: \EG element of GF(2^n)
1.1 noro 771: @item m
1.2 ! noro 772: \JP $BHsIi@0?t(B
! 773: \EG non-negative integer
1.1 noro 774: @end table
775:
776: @itemize @bullet
1.2 ! noro 777: \BJP
1.1 noro 778: @item
779: $B<+A3?t(B @var{m} $B$N(B 2 $B?JI=8=(B @var{m}=@var{m0}+@var{m1}*2+...+@var{mk}*2^k
780: $B$KBP$7(B, GF(2^n)=GF(2)[t]/(g(t)) $B$N85(B
781: @var{m0}+@var{m1}*t+...+@var{mk}*t^k mod g(t) $B$rJV$9(B.
782: @item
783: $BDj5AB?9`<0$K$h$k>jM>$O<+F0E*$K$O7W;;$5$l$J$$$?$a(B, @code{simp_ff()} $B$r(B
784: $BE,MQ$9$kI,MW$,$"$k(B.
1.2 ! noro 785: \E
! 786: \BEG
! 787: @item
! 788: Let @var{m} be a non-negative integer.
! 789: @var{m} has the binary representation
! 790: @var{m}=@var{m0}+@var{m1}*2+...+@var{mk}*2^k.
! 791: This function returns an element of GF(2^n)=GF(2)[t]/(g(t)),
! 792: @var{m0}+@var{m1}*t+...+@var{mk}*t^k mod g(t).
! 793: @item
! 794: Apply @code{simp_ff()} to reduce the result.
! 795: \E
1.1 noro 796: @end itemize
797:
798: @example
799: [1] setmod_ff(x^30+x+1);
800: x^30+x+1
801: [2] N=ntogf2n(2^100);
802: (@@^100)
803: [3] simp_ff(N);
804: (@@^13+@@^12+@@^11+@@^10)
805: @end example
806:
807: @table @t
1.2 ! noro 808: \JP @item $B;2>H(B
! 809: \EG @item References
1.1 noro 810: @fref{gf2nton}
811: @end table
812:
1.2 ! noro 813: \JP @node gf2nton,,, $BM-8BBN$K4X$9$kH!?t$N$^$H$a(B
! 814: \EG @node gf2nton,,, Functions for Finite fields
1.1 noro 815: @subsection @code{gf2nton}
816: @findex gf2nton
817:
818: @table @t
819: @item gf2nton(@var{m})
1.2 ! noro 820: \JP :: GF(2^n) $B$N85$r<+A3?t$KJQ49(B
! 821: \EG :: Converts an element of GF(2^n) into a non-negative integer.
1.1 noro 822: @end table
823:
824: @table @var
825: @item return
1.2 ! noro 826: \JP $BHsIi@0?t(B
! 827: \EG non-negative integer
1.1 noro 828: @item m
1.2 ! noro 829: \JP GF(2^n) $B$N85(B
! 830: \EG element of GF(2^n)
1.1 noro 831: @end table
832:
833: @itemize @bullet
834: @item
1.2 ! noro 835: \JP @code{gf2nton} $B$N5UJQ49$G$"$k(B.
! 836: \EG The inverse of @code{gf2nton}.
1.1 noro 837: @end itemize
838:
839: @example
840: [1] setmod_ff(x^30+x+1);
841: x^30+x+1
842: [2] N=gf2nton(2^100);
843: (@@^100)
844: [3] simp_ff(N);
845: (@@^13+@@^12+@@^11+@@^10)
846: [4] gf2nton(N);
847: 1267650600228229401496703205376
848: [5] gf2nton(simp_ff(N));
849: 15360
850: @end example
851:
852: @table @t
1.2 ! noro 853: \JP @item $B;2>H(B
! 854: \EG @item References
1.1 noro 855: @fref{gf2nton}
856: @end table
857:
1.2 ! noro 858: \JP @node ptogf2n,,, $BM-8BBN$K4X$9$kH!?t$N$^$H$a(B
! 859: \EG @node ptogf2n,,, Functions for Finite fields
1.1 noro 860: @subsection @code{ptogf2n}
861: @findex ptogf2n
862:
863: @table @t
864: @item ptogf2n(@var{poly})
1.2 ! noro 865: \JP :: $B0lJQ?tB?9`<0$r(B GF(2^n) $B$N85$KJQ49(B
! 866: \EG :: Converts a univariate polynomial into an element of GF(2^n).
1.1 noro 867: @end table
868:
869: @table @var
870: @item return
1.2 ! noro 871: \JP GF(2^n) $B$N85(B
! 872: \EG element of GF(2^n)
1.1 noro 873: @item poly
1.2 ! noro 874: \JP $B0lJQ?tB?9`<0(B
! 875: \EG univariate polynomial
1.1 noro 876: @end table
877:
878: @itemize @bullet
879: @item
1.2 ! noro 880: \BJP
1.1 noro 881: @var{poly} $B$NI=$9(B GF(2^n) $B$N85$r@8@.$9$k(B. $B78?t$O(B, 2 $B$G3d$C$?M>$j$K(B
882: $BJQ49$5$l$k(B.
883: @var{poly} $B$NJQ?t$K(B @code{@@} $B$rBeF~$7$?7k2L$HEy$7$$(B.
1.2 ! noro 884: \E
! 885: \BEG
! 886: Generates an element of GF(2^n) represented by @var{poly}.
! 887: The coefficients are reduced modulo 2.
! 888: The output is equal to the result by substituting @code{@@} for
! 889: the variable of @var{poly}.
! 890: \E
1.1 noro 891: @end itemize
892:
893: @example
894: [1] setmod_ff(x^30+x+1);
895: x^30+x+1
896: [2] ptogf2n(x^100);
897: (@@^100)
898: @end example
899:
900: @table @t
1.2 ! noro 901: \JP @item $B;2>H(B
! 902: \EG @item References
1.1 noro 903: @fref{gf2ntop}
904: @end table
905:
1.2 ! noro 906: \JP @node gf2ntop,,, $BM-8BBN$K4X$9$kH!?t$N$^$H$a(B
! 907: \EG @node gf2ntop,,, Functions for Finite fields
1.1 noro 908: @subsection @code{gf2ntop}
909: @findex gf2ntop
910:
911: @table @t
912: @item gf2ntop(@var{m}[,@var{v}])
1.2 ! noro 913: \JP :: GF(2^n) $B$N85$rB?9`<0$KJQ49(B
! 914: \EG :: Converts an element of GF(2^n) into a polynomial.
1.1 noro 915: @end table
916:
917: @table @var
918: @item return
1.2 ! noro 919: \JP $B0lJQ?tB?9`<0(B
! 920: \EG univariate polynomial
1.1 noro 921: @item m
1.2 ! noro 922: \JP GF(2^n) $B$N85(B
! 923: \EG an element of GF(2^n)
1.1 noro 924: @item v
1.2 ! noro 925: \JP $BITDj85(B
! 926: \EG indeterminate
1.1 noro 927: @end table
928:
929: @itemize @bullet
1.2 ! noro 930: \BJP
1.1 noro 931: @item
932: @var{m} $B$rI=$9B?9`<0$r(B, $B@0?t78?t$NB?9`<0%*%V%8%'%/%H$H$7$FJV$9(B.
1.2 ! noro 933: @item
! 934: @var{v} $B$N;XDj$,$J$$>l9g(B, $BD>A0$N(B @code{ptogf2n()} $B8F$S=P$7(B
1.1 noro 935: $B$K$*$1$k0z?t$NJQ?t(B ($B%G%U%)%k%H$O(B @code{x}), $B;XDj$,$"$k>l9g$K$O(B
936: $B;XDj$5$l$?ITDj85$rJQ?t$H$9$kB?9`<0$rJV$9(B.
1.2 ! noro 937: \E
! 938: \BEG
! 939: @item
! 940: Returns a polynomial representing @var{m}.
! 941: @item
! 942: If @var{v} is used as the variable of the output.
! 943: If @var{v} is not specified, the variable of the argument
! 944: of the latest @code{ptogf2n()} call. The default variable is @code{x}.
! 945: \E
1.1 noro 946: @end itemize
947:
948: @example
949: [1] setmod_ff(x^30+x+1);
950: x^30+x+1
951: [2] N=simp_ff(gf2ntop(2^100));
952: (@@^13+@@^12+@@^11+@@^10)
953: [5] gf2ntop(N);
954: [207] gf2ntop(N);
955: x^13+x^12+x^11+x^10
956: [208] gf2ntop(N,t);
957: t^13+t^12+t^11+t^10
958: @end example
959:
960: @table @t
1.2 ! noro 961: \JP @item $B;2>H(B
! 962: \EG @item References
1.1 noro 963: @fref{ptogf2n}
964: @end table
965:
1.2 ! noro 966: \JP @node defpoly_mod2,,, $BM-8BBN$K4X$9$kH!?t$N$^$H$a(B
! 967: \EG @node defpoly_mod2,,, Functions for Finite fields
1.1 noro 968: @subsection @code{defpoly_mod2}
969: @findex defpoly_mod2
970:
971: @table @t
972: @item defpoly_mod2(@var{d})
1.2 ! noro 973: \JP :: GF(2) $B>e4{Ls$J0lJQ?tB?9`<0$N@8@.(B
! 974: \EG :: Generates an irreducible univariate polynomial over GF(2).
1.1 noro 975: @end table
976:
977: @table @var
978: @item return
1.2 ! noro 979: \JP $BB?9`<0(B
! 980: \EG univariate polynomial
1.1 noro 981: @item d
1.2 ! noro 982: \JP $B@5@0?t(B
! 983: \EG positive integer
1.1 noro 984: @end table
985:
986: @itemize @bullet
1.2 ! noro 987: \BJP
1.1 noro 988: @item
989: @samp{fff} $B$GDj5A$5$l$F$$$k(B.
990: @item
991: $BM?$($i$l$?<!?t(B @var{d} $B$KBP$7(B, GF(2) $B>e(B @var{d} $B<!$N4{LsB?9`<0$rJV$9(B.
992: @item
993: $B$b$7(B $B4{Ls(B 3 $B9`<0$,B8:_$9$l$P(B, $BBh(B 2 $B9`$N<!?t$,$b$C$H$b>.$5$$(B 3 $B9`<0(B, $B$b$7(B $B4{Ls(B
994: 3 $B9`<0$,B8:_$7$J$1$l$P(B, $B4{Ls(B 5 $B9`<0$NCf$G(B, $BBh(B 2 $B9`$N<!?t$,$b$C$H$b>.$5$/(B,
995: $B$=$NCf$GBh(B 3 $B9`$N<!?t$,$b$C$H$b>.$5$/(B, $B$=$NCf$GBh(B 4 $B9`$N<!?t$,$b$C$H$b(B
996: $B>.$5$$$b$N$rJV$9(B.
1.2 ! noro 997: \E
! 998: \BEG
! 999: @item
! 1000: Defined in @samp{fff}.
! 1001: @item
! 1002: An irreducible univariate polynomial of degree @var{d} is returned.
! 1003: @item
! 1004: If an irreducible trinomial @var{x^d+x^m+1} exists, then the one
! 1005: with the smallest @var{m} is returned.
! 1006: Otherwise, an irreducible pentanomial @var{x^d+x^m1+x^m2+x^m3+1}
! 1007: (@var{m1>m2>m3} is returned.
! 1008: @var{m1}, @var{m2} and @var{m3} are determined as follows:
! 1009: Fix @var{m1} as small as possible. Then fix @var{m2} as small as possible.
! 1010: Then fix @var{m3} as small as possible.
! 1011: \E
1.1 noro 1012: @end itemize
1013:
1014: @example
1015: @end example
1016:
1017: @table @t
1.2 ! noro 1018: \JP @item $B;2>H(B
! 1019: \EG @item References
1.1 noro 1020: @fref{setmod_ff}
1021: @end table
1022:
1.2 ! noro 1023: \JP @node fctr_ff,,, $BM-8BBN$K4X$9$kH!?t$N$^$H$a(B
! 1024: \EG @node fctr_ff,,, Functions for Finite fields
1.1 noro 1025: @subsection @code{fctr_ff}
1026: @findex fctr_ff
1027:
1028: @table @t
1029: @item fctr_ff(@var{poly})
1.2 ! noro 1030: \JP :: 1 $BJQ?tB?9`<0$NM-8BBN>e$G$N4{LsJ,2r(B
! 1031: \EG :: Irreducible univariate factorization over a finite field.
1.1 noro 1032: @end table
1033:
1034: @table @var
1035: @item return
1.2 ! noro 1036: \JP $B%j%9%H(B
! 1037: \EG list
1.1 noro 1038: @item poly
1.2 ! noro 1039: \JP $BM-8BBN>e$N(B 1 $BJQ?tB?9`<0(B
! 1040: \EG univariate polynomial over a finite field
1.1 noro 1041: @end table
1042:
1043: @itemize @bullet
1.2 ! noro 1044: \BJP
1.1 noro 1045: @item
1046: @samp{fff} $B$GDj5A$5$l$F$$$k(B.
1047: @item
1048: $B0lJQ?tB?9`<0$r(B, $B8=:_@_Dj$5$l$F$$$kM-8BBN>e$G4{LsJ,2r$9$k(B.
1049: @item
1050: $B7k2L$O(B, [[@var{f1},@var{m1}],[@var{f2},@var{m2}],...] $B$J$k(B
1051: $B%j%9%H$G$"$k(B. $B$3$3$G(B, @var{fi} $B$O(B monic $B$J4{Ls0x;R(B, @var{mi} $B$O$=$N(B
1052: $B=EJ#EY$G$"$k(B.
1053: @item
1054: @var{poly} $B$N<g78?t$O<N$F$i$l$k(B.
1.2 ! noro 1055: \E
! 1056: \BEG
! 1057: @item
! 1058: Defined in @samp{fff}.
! 1059: @item
! 1060: Factorize @var{poly} into irreducible factors over the current base field.
! 1061: @item
! 1062: The result is a list [[@var{f1},@var{m1}],[@var{f2},@var{m2}],...],
! 1063: where @var{fi} is a monic irreducible factor and @var{mi} is its
! 1064: multiplicity.
! 1065: @item
! 1066: The leading coefficient of @var{poly} is abandoned.
! 1067: \E
1.1 noro 1068: @end itemize
1069:
1070: @example
1071: [178] setmod_ff(2^64-95);
1072: 18446744073709551521
1073: [179] fctr_ff(x^5+x+1);
1074: [[1*x+14123390394564558010,1],[1*x+6782485570826905238,1],
1075: [1*x+15987612182027639793,1],[1*x^2+1*x+1,1]]
1076: @end example
1077:
1078: @table @t
1.2 ! noro 1079: \JP @item $B;2>H(B
! 1080: \EG @item References
1.1 noro 1081: @fref{setmod_ff}
1082: @end table
1083:
1.2 ! noro 1084: \JP @node irredcheck_ff,,, $BM-8BBN$K4X$9$kH!?t$N$^$H$a(B
! 1085: \EG @node irredcheck_ff,,, Functions for Finite fields
1.1 noro 1086: @subsection @code{irredcheck_ff}
1087: @findex irredcheck_ff
1088:
1089: @table @t
1090: @item irredcheck_ff(@var{poly})
1.2 ! noro 1091: \JP :: 1 $BJQ?tB?9`<0$NM-8BBN>e$G$N4{LsH=Dj(B
! 1092: \EG :: Primality check of a univariate polynomial over a finite field.
1.1 noro 1093: @end table
1094:
1095: @table @var
1096: @item return
1097: 0|1
1098: @item poly
1.2 ! noro 1099: \JP $BM-8BBN>e$N(B 1 $BJQ?tB?9`<0(B
! 1100: \EG univariate polynomial over a finite field
1.1 noro 1101: @end table
1102:
1103: @itemize @bullet
1.2 ! noro 1104: \BJP
1.1 noro 1105: @item
1106: @samp{fff} $B$GDj5A$5$l$F$$$k(B.
1107: @item
1108: $BM-8BBN>e$N(B 1 $BJQ?tB?9`<0$N4{LsH=Dj$r9T$$(B, $B4{Ls$N>l9g(B 1, $B$=$l0J30$O(B 0 $B$rJV$9(B.
1.2 ! noro 1109: \E
! 1110: \BEG
! 1111: @item
! 1112: Defined in @samp{fff}.
! 1113: @item
! 1114: Returns 1 if @var{poly} is irreducible over the current base field.
! 1115: Returns 0 otherwise.
! 1116: \E
1.1 noro 1117: @end itemize
1118:
1119: @example
1120: [178] setmod_ff(2^64-95);
1121: 18446744073709551521
1122: [179] ] F=x^10+random_ff();
1123: x^10+14687973587364016969
1124: [180] irredcheck_ff(F);
1125: 1
1126: @end example
1127:
1128: @table @t
1.2 ! noro 1129: \JP @item $B;2>H(B
! 1130: \EG @item References
1.1 noro 1131: @fref{setmod_ff}
1132: @end table
1133:
1.2 ! noro 1134: \JP @node randpoly_ff,,, $BM-8BBN$K4X$9$kH!?t$N$^$H$a(B
! 1135: \EG @node randpoly_ff,,, Functions for Finite fields
1.1 noro 1136: @subsection @code{randpoly_ff}
1137: @findex randpoly_ff
1138:
1139: @table @t
1140: @item randpoly_ff(@var{d},@var{v})
1.2 ! noro 1141: \JP :: $BM-8BBN>e$N(B $BMp?t78?t(B 1 $BJQ?tB?9`<0$N@8@.(B
! 1142: \EG :: Generation of a random univariate polynomial over a finite field.
1.1 noro 1143: @end table
1144:
1145: @table @var
1146: @item return
1.2 ! noro 1147: \JP $BB?9`<0(B
! 1148: \EG polynomial
1.1 noro 1149: @item d
1.2 ! noro 1150: \JP $B@5@0?t(B
! 1151: \EG positive integer
1.1 noro 1152: @item v
1.2 ! noro 1153: \JP $BITDj85(B
! 1154: \EG indeterminate
1.1 noro 1155: @end table
1156:
1157: @itemize @bullet
1.2 ! noro 1158: \BJP
1.1 noro 1159: @item
1160: @samp{fff} $B$GDj5A$5$l$F$$$k(B.
1161: @item
1162: @var{d} $B<!L$K~(B, $BJQ?t$,(B @var{v}, $B78?t$,8=:_@_Dj$5$l$F$$$kM-8BBN$KB0$9$k(B
1163: 1 $BJQ?tB?9`<0$r@8@.$9$k(B. $B78?t$O(B @code{random_ff()} $B$K$h$j@8@.$5$l$k(B.
1.2 ! noro 1164: \E
! 1165: \BEG
! 1166: @item
! 1167: Defined in @samp{fff}.
! 1168: @item
! 1169: Generates a polynomial of @var{v} such that the degree is less than @var{d}
! 1170: and the coefficients are in the current base field.
! 1171: The coefficients are generated by @code{random_ff()}.
! 1172: \E
1.1 noro 1173: @end itemize
1174:
1175: @example
1176: [178] setmod_ff(2^64-95);
1177: 18446744073709551521
1178: [179] ] F=x^10+random_ff();
1179: [180] randpoly_ff(3,x);
1180: 17135261454578964298*x^2+4766826699653615429*x+18317369440429479651
1181: [181] randpoly_ff(3,x);
1182: 7565988813172050604*x^2+7430075767279665339*x+4699662986224873544
1183: [182] randpoly_ff(3,x);
1184: 10247781277095450395*x^2+10243690944992524936*x+4063829049268845492
1185: @end example
1186:
1187: @table @t
1.2 ! noro 1188: \JP @item $B;2>H(B
! 1189: \EG @item References
1.1 noro 1190: @fref{setmod_ff}, @fref{random_ff}
1191: @end table
1192:
1.2 ! noro 1193: \JP @node ecm_add_ff ecm_sub_ff ecm_chsgn_ff,,, $BM-8BBN$K4X$9$kH!?t$N$^$H$a(B
! 1194: \EG @node ecm_add_ff ecm_sub_ff ecm_chsgn_ff,,, Functions for Finite fields
1.1 noro 1195: @subsection @code{ecm_add_ff}, @code{ecm_sub_ff}, @code{ecm_chsgn_ff}
1196: @findex ecm_add_ff
1197: @findex ecm_sub_ff
1198: @findex ecm_chsgn_ff
1199:
1200: @table @t
1201: @item ecm_add_ff(@var{p1},@var{p2},@var{ec})
1202: @itemx ecm_sub_ff(@var{p1},@var{p2},@var{ec})
1203: @itemx ecm_chsgn_ff(@var{p1},@var{p2},@var{ec})
1.2 ! noro 1204: \JP :: $BBJ1_6J@~>e$NE@$N2C;;(B, $B8:;;(B, $B5U85(B
! 1205: \EG :: Addition, Subtraction and additive inverse for points on an elliptic curve.
1.1 noro 1206: @end table
1207:
1208: @table @var
1209: @item return
1.2 ! noro 1210: \JP $B%Y%/%H%k$^$?$O(B 0
! 1211: \EG vector or 0
1.1 noro 1212: @item p1,p2
1.2 ! noro 1213: \JP $BD9$5(B 3 $B$N%Y%/%H%k$^$?$O(B 0
! 1214: \EG vector of length 3 or 0
1.1 noro 1215: @item ec
1.2 ! noro 1216: \JP $BD9$5(B 2 $B$N%Y%/%H%k(B
! 1217: \EG vector of length 2
1.1 noro 1218: @end table
1219:
1220: @itemize @bullet
1.2 ! noro 1221: \BJP
1.1 noro 1222: @item
1223: $B8=:_@_Dj$5$l$F$$$kM-8BBN>e$G(B, @var{ec} $B$GDj5A$5$l$kBJ1_6J@~>e$N(B
1224: $BE@(B @var{p1}, @var{p2} $B$NOB(B @var{p1+p2}, $B:9(B @var{p1-p2}, $B5U85(B @var{-p1} $B$rJV$9(B.
1225: @item
1226: @var{ec} $B$O(B, $B@_Dj$5$l$F$$$kM-8BBN$,4qI8?tAGBN$N>l9g(B,
1227: @var{y^2=x^3+ec[0]x+ec[1]}, $BI8?t(B 2 $B$N>l9g(B @var{y^2+xy=x^3+ec[0]x^2+ec[1]}
1228: $B$rI=$9(B.
1229: @item
1230: $B0z?t(B, $B7k2L$H$b$K(B, $BL58B1sE@$O(B 0 $B$GI=$5$l$k(B.
1231: @item
1232: @var{p1}, @var{p2} $B$,D9$5(B 3 $B$N%Y%/%H%k$N>l9g(B, $B@F<!:BI8$K$h$k6J@~>e$N(B
1233: $BE@$rI=$9(B. $B$3$N>l9g(B, $BBh(B 3 $B:BI8$O(B 0 $B$G$"$C$F$O$$$1$J$$(B.
1234: @item
1235: $B7k2L$,D9$5(B 3 $B$N%Y%/%H%k$N>l9g(B, $BBh(B 3 $B:BI8$O(B 0 $B$G$J$$$,(B, 1 $B$H$O8B$i$J$$(B.
1236: $B%"%U%#%s:BI8$K$h$k7k2L$rF@$k$?$a$K$O(B, $BBh(B 1 $B:BI8(B, $BBh(B 2 $B:BI8$rBh(B 3 $B:BI8(B
1237: $B$G3d$kI,MW$,$"$k(B.
1238: @item
1239: @var{p1}, @var{p2} $B$,BJ1_6J@~>e$NE@$+$I$&$+$N%A%'%C%/$O$7$J$$(B.
1.2 ! noro 1240: \E
! 1241: \BEG
! 1242: @item
! 1243: Let @var{p1}, @var{p2} be points on the elliptic curve represented by
! 1244: @var{ec} over the current base field.
! 1245: ecm_add_ff(@var{p1},@var{p2},@var{ec}), ecm_sub_ff(@var{p1},@var{p2},@var{ec})
! 1246: and ecm_chsgn_ff(@var{p1},@var{p2},@var{ec}) returns
! 1247: @var{p1+p2}, @var{p1-p2} and @var{-p1} respectively.
! 1248: @item
! 1249: If the current base field is a prime field of odd order, then
! 1250: @var{ec} represents @var{y^2=x^3+ec[0]x+ec[1]}.
! 1251: If the characteristic of the current base field is 2,
! 1252: then @var{ec} represents @var{y^2+xy=x^3+ec[0]x^2+ec[1]}.
! 1253: @item
! 1254: The point at infinity is represented by 0.
! 1255: @item
! 1256: If an argument denoting a point is a vector of length 3,
! 1257: then it is the projective coordinate. In such a case
! 1258: the third coordinate must not be 0.
! 1259: @item
! 1260: If the result is a vector of length 3, then the third coordinate
! 1261: is not equal to 0 but not necessarily 1. To get the result by
! 1262: the affine coordinate, the first and the second coordinates should
! 1263: be divided by the third coordinate.
! 1264: @item
! 1265: The check whether the arguments are on the curve is omitted.
! 1266: \E
1.1 noro 1267: @end itemize
1268:
1269: @example
1270: [0] setmod_ff(1125899906842679)$
1271: [1] EC=newvect(2,[ptolmp(1),ptolmp(1)])$
1272: [2] Pt1=newvect(3,[1,-412127497938252,1])$
1273: [3] Pt2=newvect(3,[6,-252647084363045,1])$
1274: [4] Pt3=ecm_add_ff(Pt1,Pt2,EC);
1275: [ 560137044461222 184453736165476 125 ]
1276: [5] F=y^2-(x^3+EC[0]*x+EC[1])$
1277: [6] subst(F,x,Pt3[0]/Pt3[2],y,Pt3[1]/Pt3[2]);
1278: 0
1279: [7] ecm_add_ff(Pt3,ecm_chsgn_ff(Pt3),EC);
1280: 0
1281: [8] D=ecm_sub_ff(Pt3,Pt2,EC);
1282: [ 886545905133065 119584559149586 886545905133065 ]
1283: [9] D[0]/D[2]==Pt1[0]/Pt1[2];
1284: 1
1285: [10] D[1]/D[2]==Pt1[1]/Pt1[2];
1286: 1
1287: @end example
1288:
1289: @table @t
1.2 ! noro 1290: \JP @item $B;2>H(B
! 1291: \EG @item References
1.1 noro 1292: @fref{setmod_ff}
1293: @end table
1294:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>