Annotation of OpenXM/src/asir-doc/parts/ff.texi, Revision 1.1.1.1
1.1 noro 1: @node $BM-8BBN$K4X$9$k1i;;(B,,, Top
2: @chapter $BM-8BBN$K4X$9$k1i;;(B
3:
4: @menu
5: * $BM-8BBN$NI=8=$*$h$S1i;;(B::
6: * $BM-8BBN>e$G$N(B 1 $BJQ?tB?9`<0$N1i;;(B::
7: * $BM-8BBN>e$NBJ1_6J@~$K4X$9$k1i;;(B::
8: * $BM-8BBN$K4X$9$kH!?t$N$^$H$a(B::
9: @end menu
10:
11: @node $BM-8BBN$NI=8=$*$h$S1i;;(B,,, $BM-8BBN$K4X$9$k1i;;(B
12: @section $BM-8BBN$NI=8=$*$h$S1i;;(B
13:
14: @noindent
15: @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)
16: $B$,Dj5A$G$-$k(B. $B$3$l$i$OA4$F(B, @code{setmod_ff()} $B$K$h$jDj5A$5$l$k(B.
17:
18: @example
19: [0] P=pari(nextprime,2^50);
20: 1125899906842679
21: [1] setmod_ff(P);
22: 1125899906842679
23: [2] field_type_ff();
24: 1
25: [3] load("fff");
26: 1
27: [4] F=defpoly_mod2(50);
28: x^50+x^4+x^3+x^2+1
29: [5] setmod_ff(F);
30: x^50+x^4+x^3+x^2+1
31: [6] field_type_ff();
32: 2
33: @end example
34: @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
35: $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
36: $B$k(B. @code{setmod_ff()} $B$K$*$$$F$O0z?t$N4{Ls%A%'%C%/$O9T$o$:(B, $B8F$S=P$7B&(B
37: $B$,@UG$$r;}$D(B.
38:
39: $B4pACBN$H$O(B, $B$"$/$^$GM-8BBN$N85$H$7$F@k8@$"$k$$$ODj5A$5$l$?%*%V%8%'%/%H$,(B,
40: $B%;%C%H$5$l$?4pACBN$N1i;;$K=>$&$H$$$&0UL#$G$"$k(B. $BB($A(B, $BM-M}?t$I$&$7$N1i;;(B
41: $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
42: $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
43: $B$k(B.
44:
45: 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.
46: $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
47: $B$H$J$k(B.
48:
49: $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,
50: @code{simp_ff()} $B$K$h$k(B.
51:
52: @example
53: [0] P=pari(nextprime,2^50);
54: 1125899906842679
55: [1] setmod_ff(P);
56: 1125899906842679
57: [2] A=simp_ff(2^100);
58: 3025
59: [3] ntype(@@@@);
60: 6
61: @end example
62:
63: $B$^$?(B, GF(2^n) $B$N>l9g$$$/$D$+$NJ}K!$,$"$k(B.
64: @example
65: [0] setmod_ff(x^50+x^4+x^3+x^2+1);
66: x^50+x^4+x^3+x^2+1
67: [1] A=@@;
68: (@@)
69: [2] ptogf2n(x^50+1);
70: (@@^50+1)
71: [3] simp_ff(@@@@);
72: (@@^4+@@^3+@@^2)
73: [4] ntogf2n(2^10-1);
74: (@@^9+@@^8+@@^7+@@^6+@@^5+@@^4+@@^3+@@^2+@@+1)
75: @end example
76:
77: $BM-8BBN$N85$O?t$G$"$j(B, $BBN1i;;$,2DG=$G$"$k(B. @code{@@} $B$O(B
78: 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}.
79:
80: @noindent
81:
82: @node $BM-8BBN>e$G$N(B 1 $BJQ?tB?9`<0$N1i;;(B,,, $BM-8BBN$K4X$9$k1i;;(B
83: @section $BM-8BBN>e$G$N(B 1 $BJQ?tB?9`<0$N1i;;(B
84:
85: @noindent
86: @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,
87: $BB?9`<0$N4{LsH=Dj$J$I$N4X?t$,Dj5A$5$l$F$$$k(B.
88:
89: $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
90: $B$H$J$j(B, $BF~NOB?9`<0$N<g78?t$O<N$F$i$l$k(B.
91:
92: @noindent
93: $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
94: $B%"%k%4%j%:%`$r:NMQ$7$F$$$k(B.
95:
96: @example
97: @end example
98:
99: @noindent
100: $BM-8BBN>e$G$N0x?tJ,2r$O(B, DDF $B$N8e(B, $B<!?tJL0x;R$NJ,2r$N:]$K(B, Berlekamp
101: $B%"%k%4%j%:%`$GNm6u4V$r5a$a(B, $B4pDl%Y%/%H%k$N:G>.B?9`<0$r5a$a(B, $B$=$N:,(B
102: $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.
103:
104: @example
105: @end example
106:
107: @node $BM-8BBN>e$NBJ1_6J@~$K4X$9$k1i;;(B,,, $BM-8BBN$K4X$9$k1i;;(B
108: @section $BM-8BBN>e$NBJ1_6J@~$K4X$9$k1i;;(B
109:
110: $BM-8BBN>e$NBJ1_6J@~$K4X$9$k$$$/$D$+$N4pK\E*$J1i;;$,(B, $BAH$_9~$_4X?t$H$7$F(B
111: $BDs6!$5$l$F$$$k(B.
112:
113: $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}
114: $B$OM-8BBN$N85$G(B,
115: @code{setmod_ff} $B$GDj5A$5$l$F$$$kM-8BBN$,AGBN$N>l9g(B, @var{y^2=x^3+ax+b},
116: $BI8?t(B 2 $B$NBN$N>l9g(B @var{y^2+xy=x^3+ax^2+b} $B$rI=$9(B.
117:
118: $BBJ1_6J@~>e$NE@$O(B, $BL58B1sE@$b9~$a$F2CK!72$r$J$9(B. $B$3$N1i;;$K4X$7$F(B, $B2C;;(B
119: (@code{ecm_add_ff()}), $B8:;;(B (@code{ecm_sub_ff()}) $B$*$h$S5U857W;;$N$?$a$N(B
120: $B4X?t(B (@code{ecm_chsgn_ff()}) $B$,Ds6!$5$l$F$$$k(B. $BCm0U$9$Y$-$O(B, $B1i;;$NBP>](B
121: $B$H$J$kE@$NI=8=$,(B,
122:
123: @itemize @bullet
124: @item $BL58B1sE@$O(B 0.
125: @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
126: 0 $B$G$J$$(B.
127: @end itemize
128:
129: $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
130: $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
131: $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
132: $B@8@.$9$kI,MW$,$"$k(B.
133: $B1i;;7k2L$b@F<!:BI8$GF@$i$l$k$,(B, @var{z} $B:BI8$,(B 1 $B$H$O8B$i$J$$$?$a(B,
134: $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
135: $B3d$kI,MW$,$"$k(B.
136:
137: @node $BM-8BBN$K4X$9$kH!?t$N$^$H$a(B,,, $BM-8BBN$K4X$9$k1i;;(B
138: @section $BM-8BBN$K4X$9$kH!?t$N$^$H$a(B
139:
140: @menu
141: * setmod_ff::
142: * field_type_ff::
143: * field_order_ff::
144: * characteristic_ff::
145: * extdeg_ff::
146: * simp_ff::
147: * random_ff::
148: * lmptop::
149: * ntogf2n::
150: * gf2nton::
151: * ptogf2n::
152: * gf2ntop::
153: * defpoly_mod2::
154: * fctr_ff::
155: * irredcheck_ff::
156: * randpoly_ff::
157: * ecm_add_ff ecm_sub_ff ecm_chsgn_ff::
158: * extdeg_ff::
159: @end menu
160:
161: @node setmod_ff,,, $BM-8BBN$K4X$9$kH!?t$N$^$H$a(B
162: @subsection @code{setmod_ff}
163: @findex setmod_ff
164:
165: @table @t
166: @item setmod_ff([@var{prime}|@var{poly}])
167: :: $BM-8BBN$N@_Dj(B, $B@_Dj$5$l$F$$$kM-8BBN$NK!(B, $BDj5AB?9`<0$NI=<((B
168: @end table
169:
170: @table @var
171: @item return
172: $B?t$^$?$OB?9`<0(B
173: @item prime
174: $BAG?t(B
175: @item poly
176: GF(2) $B>e4{Ls$J(B 1 $BJQ?tB?9`<0(B
177: @end table
178:
179: @itemize @bullet
180: @item
181: $B0z?t$,@5@0?t(B @var{prime} $B$N;~(B, GF(@var{prime}) $B$r4pACBN$H$7$F@_Dj$9$k(B.
182: @item
183: $B0z?t$,B?9`<0(B @var{poly} $B$N;~(B,
184: GF(2^deg(@var{poly} mod 2)) = GF(2)[t]/(@var{poly}(t) mod2)
185: $B$r4pACBN$H$7$F@_Dj$9$k(B.
186: @item
187: $BL50z?t$N;~(B, $B@_Dj$5$l$F$$$k4pACBN$,(B GF(@var{prime}) $B$N>l9g(B @var{prime},
188: GF(2^n) $B$N>l9gDj5AB?9`<0$rJV$9(B.
189: @item
190: 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
191: $B1F6A$9$k$?$a(B, @code{defpoly_mod2()} $B$G@8@.$9$k$N$,$h$$(B.
192: @end itemize
193:
194: @example
195: [174] defpoly_mod2(100);
196: x^100+x^15+1
197: [175] setmod_ff(@@@@);
198: x^100+x^15+1
199: [176] setmod_ff();
200: x^100+x^15+1
201: @end example
202:
203: @table @t
204: @item $B;2>H(B
205: @fref{defpoly_mod2}
206: @end table
207:
208: @node field_type_ff,,, $BM-8BBN$K4X$9$kH!?t$N$^$H$a(B
209: @subsection @code{field_type_ff}
210: @findex field_type_ff
211:
212: @table @t
213: @item field_type_ff()
214: :: $B@_Dj$5$l$F$$$k4pACBN$N<oN`(B
215: @end table
216:
217: @table @var
218: @item return
219: $B?t(B
220: @end table
221:
222: @itemize @bullet
223: @item
224: $B@_Dj$5$l$F$$$k4pACBN$N<oN`$rJV$9(B.
225: @item
226: $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.
227: @end itemize
228:
229: @example
230: [0] field_type_ff();
231: 0
232: [1] setmod_ff(3);
233: 3
234: [2] field_type_ff();
235: 1
236: [3] setmod_ff(x^2+x+1);
237: x^2+x+1
238: [4] field_type_ff();
239: 2
240: @end example
241:
242: @table @t
243: @item $B;2>H(B
244: @fref{setmod_ff}
245: @end table
246:
247: @node field_order_ff,,, $BM-8BBN$K4X$9$kH!?t$N$^$H$a(B
248: @subsection @code{field_order_ff}
249: @findex field_order_ff
250:
251: @table @t
252: @item field_order_ff()
253: :: $B@_Dj$5$l$F$$$k4pACBN$N0L?t(B
254: @end table
255:
256: @table @var
257: @item return
258: $B?t(B
259: @end table
260:
261: @itemize @bullet
262: @item
263: $B@_Dj$5$l$F$$$k4pACBN$N0L?t(B ($B85$N8D?t(B) $B$rJV$9(B.
264: @item
265: $B@_Dj$5$l$F$$$kBN$,(B GF(q) $B$J$i$P(B q $B$rJV$9(B.
266: @end itemize
267:
268: @example
269: [0] field_order_ff();
270: field_order_ff : current_ff is not set
271: return to toplevel
272: [0] setmod_ff(3);
273: 3
274: [1] field_order_ff();
275: 3
276: [2] setmod_ff(x^2+x+1);
277: x^2+x+1
278: [3] field_order_ff();
279: 4
280: @end example
281:
282: @table @t
283: @item $B;2>H(B
284: @fref{setmod_ff}
285: @end table
286:
287: @node characteristic_ff,,, $BM-8BBN$K4X$9$kH!?t$N$^$H$a(B
288: @subsection @code{characteristic_ff}
289: @findex characteristic_ff
290:
291: @table @t
292: @item characteristic_ff()
293: :: $B@_Dj$5$l$F$$$kBN$NI8?t(B
294: @end table
295:
296: @table @var
297: @item return
298: $B?t(B
299: @end table
300:
301: @itemize @bullet
302: @item
303: $B@_Dj$5$l$F$$$kBN$NI8?t$rJV$9(B.
304: @item
305: GF(p) $B$N>l9g(B p, GF(2^n) $B$N>l9g(B 2 $B$rJV$9(B.
306: @end itemize
307:
308: @example
309: [0] characteristic_ff();
310: characteristic_ff : current_ff is not set
311: return to toplevel
312: [0] setmod_ff(3);
313: 3
314: [1] characteristic_ff();
315: 3
316: [2] setmod_ff(x^2+x+1);
317: x^2+x+1
318: [3] characteristic_ff();
319: 2
320: @end example
321:
322: @table @t
323: @item $B;2>H(B
324: @fref{setmod_ff}
325: @end table
326:
327: @node extdeg_ff,,, $BM-8BBN$K4X$9$kH!?t$N$^$H$a(B
328: @subsection @code{extdeg_ff}
329: @findex extdeg_ff
330:
331: @table @t
332: @item extdeg_ff()
333: :: $B@_Dj$5$l$F$$$k4pACBN$N(B, $BAGBN$KBP$9$k3HBg<!?t(B
334: @end table
335:
336: @table @var
337: @item return
338: $B?t(B
339: @end table
340:
341: @itemize @bullet
342: @item
343: $B@_Dj$5$l$F$$$k4pACBN$N(B, $BAGBN$KBP$9$k3HBg<!?t$rJV$9(B.
344: @item
345: GF(p) $B$N>l9g(B 1, GF(2^n) $B$N>l9g(B n $B$rJV$9(B.
346: @end itemize
347:
348: @example
349: [0] extdeg_ff();
350: extdeg_ff : current_ff is not set
351: return to toplevel
352: [0] setmod_ff(3);
353: 3
354: [1] extdeg_ff();
355: 1
356: [2] setmod_ff(x^2+x+1);
357: x^2+x+1
358: [3] extdeg_ff();
359: 2
360: @end example
361:
362: @table @t
363: @item $B;2>H(B
364: @fref{setmod_ff}
365: @end table
366:
367: @node simp_ff,,, $BM-8BBN$K4X$9$kH!?t$N$^$H$a(B
368: @subsection @code{simp_ff}
369: @findex simp_ff
370:
371: @table @t
372: @item simp_ff(@var{obj})
373: :: $B?t(B, $B$"$k$$$OB?9`<0$N78?t$rM-8BBN$N85$KJQ49(B
374: @end table
375:
376: @table @var
377: @item return
378: $B?t$^$?$OB?9`<0(B
379: @item obj
380: $B?t$^$?$OB?9`<0(B
381: @end table
382:
383: @itemize @bullet
384: @item
385: $B?t(B, $B$"$k$$$OB?9`<0$N78?t$rM-8BBN$N85$KJQ49$9$k(B.
386: @item
387: $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
388: $BMQ$$$k(B.
389: @item
390: $BM-8BBN$N85$KBP$7(B, $BK!$"$k$$$ODj5AB?9`<0$K$h$k(B reduction $B$r9T$&>l9g$K$b(B
391: $BMQ$$$k(B.
392: @end itemize
393:
394: @example
395: [0] simp_ff((x+1)^10);
396: 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
397: [1] setmod_ff(3);
398: 3
399: [2] simp_ff((x+1)^10);
400: 1*x^10+1*x^9+1*x+1
401: [3] ntype(coef(@@@@,10));
402: 6
403: @end example
404:
405: @table @t
406: @item $B;2>H(B
407: @fref{setmod_ff}, @fref{lmptop}, @fref{gf2nton}
408: @end table
409:
410: @node random_ff,,, $BM-8BBN$K4X$9$kH!?t$N$^$H$a(B
411: @subsection @code{random_ff}
412: @findex random_ff
413:
414: @table @t
415: @item random_ff()
416: :: $BM-8BBN$N85$NMp?t@8@.(B
417: @end table
418:
419: @table @var
420: @item return
421: $BM-8BBN$N85(B
422: @end table
423:
424: @itemize @bullet
425: @item
426: $BM-8BBN$N85$rMp?t@8@.$9$k(B.
427: @item
428: GF(p) $B$N>l9g(B, 0 $B0J>e(B p $BL$K~$N@0?t$G$"$i$o$5$l$k(B GF(p) $B$N85(B,
429: GF(2^n) $B$N>l9g(B, n $B<!L$K~$N(B GF(2) $B>e$NB?9`<0$GI=$5$l$k(B GF(2^n) $B$r(B
430: $BJV$9(B.
431: @item
432: @code{random()}, @code{lrandom()} $B$HF1$8(B 32bit $BMp?tH/@84o$r;HMQ$7$F$$$k(B.
433: @end itemize
434:
435: @example
436: [0] random_ff();
437: random_ff : current_ff is not set
438: return to toplevel
439: [0] setmod_ff(pari(nextprime,2^40));
440: 1099511627791
441: [1] random_ff();
442: 561856154357
443: [2] random_ff();
444: 45141628299
445: @end example
446:
447: @table @t
448: @item $B;2>H(B
449: @fref{setmod_ff}, @fref{random}, @fref{lrandom}
450: @end table
451:
452: @node lmptop,,, $BM-8BBN$K4X$9$kH!?t$N$^$H$a(B
453: @subsection @code{lmptop}
454: @findex lmptop
455:
456: @table @t
457: @item lmptop(@var{obj})
458: :: GF(p) $B78?tB?9`<0$N78?t$r@0?t$KJQ49(B
459: @end table
460:
461: @table @var
462: @item return
463: $B@0?t78?tB?9`<0(B
464: @item obj
465: GF(p)$B78?tB?9`<0(B
466: @end table
467:
468: @itemize @bullet
469: @item
470: GF(p) $B78?tB?9`<0$N78?t$r@0?t$KJQ49$9$k(B.
471: @item
472: GF(p) $B$N85$O(B, 0 $B0J>e(B p $BL$K~$N@0?t$GI=8=$5$l$F$$$k(B.
473: $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
474: $BJQ49$5$l$k(B.
475: @item
476: GF(p) $B$N85$O(B, $B@0?t$KJQ49$5$l$k(B.
477: @end itemize
478:
479: @example
480: [0] setmod_ff(pari(nextprime,2^40));
481: 1099511627791
482: [1] F=simp_ff((x-1)^10);
483: 1*x^10+1099511627781*x^9+45*x^8+1099511627671*x^7+210*x^6
484: +1099511627539*x^5+210*x^4+1099511627671*x^3+45*x^2+1099511627781*x+1
485: [2] setmod_ff(547);
486: 547
487: [3] F=simp_ff((x-1)^10);
488: 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
489: [4] lmptop(F);
490: 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
491: [5] lmptop(coef(F,1));
492: 537
493: [6] ntype(@@@@);
494: 0
495: @end example
496:
497: @table @t
498: @item $B;2>H(B
499: @fref{simp_ff}
500: @end table
501:
502: @node ntogf2n,,, $BM-8BBN$K4X$9$kH!?t$N$^$H$a(B
503: @subsection @code{ntogf2n}
504: @findex ntogf2n
505:
506: @table @t
507: @item ntogf2n(@var{m})
508: :: $B<+A3?t$r(B GF(2^n) $B$N85$KJQ49(B
509: @end table
510:
511: @table @var
512: @item return
513: GF(2^n) $B$N85(B
514: @item m
515: $BHsIi@0?t(B
516: @end table
517:
518: @itemize @bullet
519: @item
520: $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
521: $B$KBP$7(B, GF(2^n)=GF(2)[t]/(g(t)) $B$N85(B
522: @var{m0}+@var{m1}*t+...+@var{mk}*t^k mod g(t) $B$rJV$9(B.
523: @item
524: $BDj5AB?9`<0$K$h$k>jM>$O<+F0E*$K$O7W;;$5$l$J$$$?$a(B, @code{simp_ff()} $B$r(B
525: $BE,MQ$9$kI,MW$,$"$k(B.
526: @end itemize
527:
528: @example
529: [1] setmod_ff(x^30+x+1);
530: x^30+x+1
531: [2] N=ntogf2n(2^100);
532: (@@^100)
533: [3] simp_ff(N);
534: (@@^13+@@^12+@@^11+@@^10)
535: @end example
536:
537: @table @t
538: @item $B;2>H(B
539: @fref{gf2nton}
540: @end table
541:
542: @node gf2nton,,, $BM-8BBN$K4X$9$kH!?t$N$^$H$a(B
543: @subsection @code{gf2nton}
544: @findex gf2nton
545:
546: @table @t
547: @item gf2nton(@var{m})
548: :: GF(2^n) $B$N85$r<+A3?t$KJQ49(B
549: @end table
550:
551: @table @var
552: @item return
553: $BHsIi@0?t(B
554: @item m
555: GF(2^n) $B$N85(B
556: @end table
557:
558: @itemize @bullet
559: @item
560: @code{gf2nton} $B$N5UJQ49$G$"$k(B.
561: @end itemize
562:
563: @example
564: [1] setmod_ff(x^30+x+1);
565: x^30+x+1
566: [2] N=gf2nton(2^100);
567: (@@^100)
568: [3] simp_ff(N);
569: (@@^13+@@^12+@@^11+@@^10)
570: [4] gf2nton(N);
571: 1267650600228229401496703205376
572: [5] gf2nton(simp_ff(N));
573: 15360
574: @end example
575:
576: @table @t
577: @item $B;2>H(B
578: @fref{gf2nton}
579: @end table
580:
581: @node ptogf2n,,, $BM-8BBN$K4X$9$kH!?t$N$^$H$a(B
582: @subsection @code{ptogf2n}
583: @findex ptogf2n
584:
585: @table @t
586: @item ptogf2n(@var{poly})
587: :: $B0lJQ?tB?9`<0$r(B GF(2^n) $B$N85$KJQ49(B
588: @end table
589:
590: @table @var
591: @item return
592: GF(2^n) $B$N85(B
593: @item poly
594: $B0lJQ?tB?9`<0(B
595: @end table
596:
597: @itemize @bullet
598: @item
599: @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
600: $BJQ49$5$l$k(B.
601: @var{poly} $B$NJQ?t$K(B @code{@@} $B$rBeF~$7$?7k2L$HEy$7$$(B.
602: @end itemize
603:
604: @example
605: [1] setmod_ff(x^30+x+1);
606: x^30+x+1
607: [2] ptogf2n(x^100);
608: (@@^100)
609: @end example
610:
611: @table @t
612: @item $B;2>H(B
613: @fref{gf2ntop}
614: @end table
615:
616: @node gf2ntop,,, $BM-8BBN$K4X$9$kH!?t$N$^$H$a(B
617: @subsection @code{gf2ntop}
618: @findex gf2ntop
619:
620: @table @t
621: @item gf2ntop(@var{m}[,@var{v}])
622: :: GF(2^n) $B$N85$rB?9`<0$KJQ49(B
623: @end table
624:
625: @table @var
626: @item return
627: $B0lJQ?tB?9`<0(B
628: @item m
629: GF(2^n) $B$N85(B
630: @item v
631: $BITDj85(B
632: @end table
633:
634: @itemize @bullet
635: @item
636: @var{m} $B$rI=$9B?9`<0$r(B, $B@0?t78?t$NB?9`<0%*%V%8%'%/%H$H$7$FJV$9(B.
637: @item @var{v} $B$N;XDj$,$J$$>l9g(B, $BD>A0$N(B @code{ptogf2n()} $B8F$S=P$7(B
638: $B$K$*$1$k0z?t$NJQ?t(B ($B%G%U%)%k%H$O(B @code{x}), $B;XDj$,$"$k>l9g$K$O(B
639: $B;XDj$5$l$?ITDj85$rJQ?t$H$9$kB?9`<0$rJV$9(B.
640: @end itemize
641:
642: @example
643: [1] setmod_ff(x^30+x+1);
644: x^30+x+1
645: [2] N=simp_ff(gf2ntop(2^100));
646: (@@^13+@@^12+@@^11+@@^10)
647: [5] gf2ntop(N);
648: [207] gf2ntop(N);
649: x^13+x^12+x^11+x^10
650: [208] gf2ntop(N,t);
651: t^13+t^12+t^11+t^10
652: @end example
653:
654: @table @t
655: @item $B;2>H(B
656: @fref{ptogf2n}
657: @end table
658:
659: @node defpoly_mod2,,, $BM-8BBN$K4X$9$kH!?t$N$^$H$a(B
660: @subsection @code{defpoly_mod2}
661: @findex defpoly_mod2
662:
663: @table @t
664: @item defpoly_mod2(@var{d})
665: :: GF(2) $B>e4{Ls$J0lJQ?tB?9`<0$N@8@.(B
666: @end table
667:
668: @table @var
669: @item return
670: $BB?9`<0(B
671: @item d
672: $B@5@0?t(B
673: @end table
674:
675: @itemize @bullet
676: @item
677: @samp{fff} $B$GDj5A$5$l$F$$$k(B.
678: @item
679: $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.
680: @item
681: $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
682: 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,
683: $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
684: $B>.$5$$$b$N$rJV$9(B.
685: @end itemize
686:
687: @example
688: @end example
689:
690: @table @t
691: @item $B;2>H(B
692: @fref{setmod_ff}
693: @end table
694:
695: @node fctr_ff,,, $BM-8BBN$K4X$9$kH!?t$N$^$H$a(B
696: @subsection @code{fctr_ff}
697: @findex fctr_ff
698:
699: @table @t
700: @item fctr_ff(@var{poly})
701: :: 1 $BJQ?tB?9`<0$NM-8BBN>e$G$N4{LsJ,2r(B
702: @end table
703:
704: @table @var
705: @item return
706: $B%j%9%H(B
707: @item poly
708: $BM-8BBN>e$N(B 1 $BJQ?tB?9`<0(B
709: @end table
710:
711: @itemize @bullet
712: @item
713: @samp{fff} $B$GDj5A$5$l$F$$$k(B.
714: @item
715: $B0lJQ?tB?9`<0$r(B, $B8=:_@_Dj$5$l$F$$$kM-8BBN>e$G4{LsJ,2r$9$k(B.
716: @item
717: $B7k2L$O(B, [[@var{f1},@var{m1}],[@var{f2},@var{m2}],...] $B$J$k(B
718: $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
719: $B=EJ#EY$G$"$k(B.
720: @item
721: @var{poly} $B$N<g78?t$O<N$F$i$l$k(B.
722: @end itemize
723:
724: @example
725: [178] setmod_ff(2^64-95);
726: 18446744073709551521
727: [179] fctr_ff(x^5+x+1);
728: [[1*x+14123390394564558010,1],[1*x+6782485570826905238,1],
729: [1*x+15987612182027639793,1],[1*x^2+1*x+1,1]]
730: @end example
731:
732: @table @t
733: @item $B;2>H(B
734: @fref{setmod_ff}
735: @end table
736:
737: @node irredcheck_ff,,, $BM-8BBN$K4X$9$kH!?t$N$^$H$a(B
738: @subsection @code{irredcheck_ff}
739: @findex irredcheck_ff
740:
741: @table @t
742: @item irredcheck_ff(@var{poly})
743: :: 1 $BJQ?tB?9`<0$NM-8BBN>e$G$N4{LsH=Dj(B
744: @end table
745:
746: @table @var
747: @item return
748: 0|1
749: @item poly
750: $BM-8BBN>e$N(B 1 $BJQ?tB?9`<0(B
751: @end table
752:
753: @itemize @bullet
754: @item
755: @samp{fff} $B$GDj5A$5$l$F$$$k(B.
756: @item
757: $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.
758: @end itemize
759:
760: @example
761: [178] setmod_ff(2^64-95);
762: 18446744073709551521
763: [179] ] F=x^10+random_ff();
764: x^10+14687973587364016969
765: [180] irredcheck_ff(F);
766: 1
767: @end example
768:
769: @table @t
770: @item $B;2>H(B
771: @fref{setmod_ff}
772: @end table
773:
774: @node randpoly_ff,,, $BM-8BBN$K4X$9$kH!?t$N$^$H$a(B
775: @subsection @code{randpoly_ff}
776: @findex randpoly_ff
777:
778: @table @t
779: @item randpoly_ff(@var{d},@var{v})
780: :: $BM-8BBN>e$N(B $BMp?t78?t(B 1 $BJQ?tB?9`<0$N@8@.(B
781: @end table
782:
783: @table @var
784: @item return
785: $BB?9`<0(B
786: @item d
787: $B@5@0?t(B
788: @item v
789: $BITDj85(B
790: @end table
791:
792: @itemize @bullet
793: @item
794: @samp{fff} $B$GDj5A$5$l$F$$$k(B.
795: @item
796: @var{d} $B<!L$K~(B, $BJQ?t$,(B @var{v}, $B78?t$,8=:_@_Dj$5$l$F$$$kM-8BBN$KB0$9$k(B
797: 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.
798: @end itemize
799:
800: @example
801: [178] setmod_ff(2^64-95);
802: 18446744073709551521
803: [179] ] F=x^10+random_ff();
804: [180] randpoly_ff(3,x);
805: 17135261454578964298*x^2+4766826699653615429*x+18317369440429479651
806: [181] randpoly_ff(3,x);
807: 7565988813172050604*x^2+7430075767279665339*x+4699662986224873544
808: [182] randpoly_ff(3,x);
809: 10247781277095450395*x^2+10243690944992524936*x+4063829049268845492
810: @end example
811:
812: @table @t
813: @item $B;2>H(B
814: @fref{setmod_ff}, @fref{random_ff}
815: @end table
816:
817: @node ecm_add_ff ecm_sub_ff ecm_chsgn_ff,,, $BM-8BBN$K4X$9$kH!?t$N$^$H$a(B
818: @subsection @code{ecm_add_ff}, @code{ecm_sub_ff}, @code{ecm_chsgn_ff}
819: @findex ecm_add_ff
820: @findex ecm_sub_ff
821: @findex ecm_chsgn_ff
822:
823: @table @t
824: @item ecm_add_ff(@var{p1},@var{p2},@var{ec})
825: @itemx ecm_sub_ff(@var{p1},@var{p2},@var{ec})
826: @itemx ecm_chsgn_ff(@var{p1},@var{p2},@var{ec})
827: :: $BBJ1_6J@~>e$NE@$N2C;;(B, $B8:;;(B, $B5U85(B
828: @end table
829:
830: @table @var
831: @item return
832: $B%Y%/%H%k$^$?$O(B 0
833: @item p1,p2
834: $BD9$5(B 3 $B$N%Y%/%H%k$^$?$O(B 0
835: @item ec
836: $BD9$5(B 2 $B$N%Y%/%H%k(B
837: @end table
838:
839: @itemize @bullet
840: @item
841: $B8=:_@_Dj$5$l$F$$$kM-8BBN>e$G(B, @var{ec} $B$GDj5A$5$l$kBJ1_6J@~>e$N(B
842: $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.
843: @item
844: @var{ec} $B$O(B, $B@_Dj$5$l$F$$$kM-8BBN$,4qI8?tAGBN$N>l9g(B,
845: @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]}
846: $B$rI=$9(B.
847: @item
848: $B0z?t(B, $B7k2L$H$b$K(B, $BL58B1sE@$O(B 0 $B$GI=$5$l$k(B.
849: @item
850: @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
851: $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.
852: @item
853: $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.
854: $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
855: $B$G3d$kI,MW$,$"$k(B.
856: @item
857: @var{p1}, @var{p2} $B$,BJ1_6J@~>e$NE@$+$I$&$+$N%A%'%C%/$O$7$J$$(B.
858: @end itemize
859:
860: @example
861: [0] setmod_ff(1125899906842679)$
862: [1] EC=newvect(2,[ptolmp(1),ptolmp(1)])$
863: [2] Pt1=newvect(3,[1,-412127497938252,1])$
864: [3] Pt2=newvect(3,[6,-252647084363045,1])$
865: [4] Pt3=ecm_add_ff(Pt1,Pt2,EC);
866: [ 560137044461222 184453736165476 125 ]
867: [5] F=y^2-(x^3+EC[0]*x+EC[1])$
868: [6] subst(F,x,Pt3[0]/Pt3[2],y,Pt3[1]/Pt3[2]);
869: 0
870: [7] ecm_add_ff(Pt3,ecm_chsgn_ff(Pt3),EC);
871: 0
872: [8] D=ecm_sub_ff(Pt3,Pt2,EC);
873: [ 886545905133065 119584559149586 886545905133065 ]
874: [9] D[0]/D[2]==Pt1[0]/Pt1[2];
875: 1
876: [10] D[1]/D[2]==Pt1[1]/Pt1[2];
877: 1
878: @end example
879:
880: @table @t
881: @item $B;2>H(B
882: @fref{setmod_ff}
883: @end table
884:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>