Annotation of OpenXM/src/asir-doc/parts/ff.texi, Revision 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>