curverecords.nb   [plain text]


(***********************************************************************

                    Mathematica-Compatible Notebook

This notebook can be used on any computer system with Mathematica 3.0,
MathReader 3.0, or any compatible application. The data for the notebook 
starts with the line of stars above.

To get the notebook into a Mathematica-compatible application, do one of 
the following:

* Save the data starting with the line of stars above into a file
  with a name ending in .nb, then open the file inside the application;

* Copy the data starting with the line of stars above to the
  clipboard, then use the Paste menu command inside the application.

Data for notebooks contains only printable 7-bit ASCII and can be
sent directly in email or through ftp in text mode.  Newlines can be
CR, LF or CRLF (Unix, Macintosh or MS-DOS style).

NOTE: If you modify the data for this notebook not in a Mathematica-
compatible application, you must delete the line below containing the 
word CacheID, otherwise Mathematica-compatible applications may try to 
use invalid cache data.

For more information on notebooks and Mathematica-compatible 
applications, contact Wolfram Research:
  web: http://www.wolfram.com
  email: info@wolfram.com
  phone: +1-217-398-0700 (U.S.)

Notebook reader applications are available free of charge from 
Wolfram Research.
***********************************************************************)

(*CacheID: 232*)


(*NotebookFileLineBreakTest
NotebookFileLineBreakTest*)
(*NotebookOptionsPosition[     18376,        710]*)
(*NotebookOutlinePosition[     19227,        740]*)
(*  CellTagsIndexPosition[     19183,        736]*)
(*WindowFrame->Normal*)



Notebook[{
Cell["\<\
(* curverecords

   Recorded data for Apple ECC curves.
   
   R. Crandall
   3 Apr 2001
   

 *)

pointQ[x_] := (JacobiSymbol[x^3 + c x^2 + a x + b, p] > -1);

(* Next, binary expansion for very old M'ca versions,
   otherwise use IntegerDigits[.,2]. *)
bitList[k_] := Block[{li = {}, j = k},
\tWhile[j > 0,
\t    li = Append[li, Mod[j,2]];
\t    j = Floor[j/2];
\t];
\tReturn[Reverse[li]];
\t];
\t
ellinv[n_] := PowerMod[n,-1,p];
(* Next, obtain actual x,y coords via normalization:
   {x,y,z} := {X/Z^2, Y/Z^3, 1}. *)
normalize[pt_] := Block[{z,z2,z3},
\t\tIf[pt[[3]] == 0, Return[pt]];
\t\tz = ellinv[pt[[3]]];
\t\tz2 = Mod[z^2,p];
\t\tz3 = Mod[z z2,p];
\t\tReturn[{Mod[pt[[1]] z2, p], Mod[pt[[2]] z3, p], 1}];
\t\t];

ellneg[pt_] := Mod[pt * {1,-1,1}, p];
ellsub[pt1_, pt2_] := elladd[pt1, ellneg[pt2]];
elldouble[pt_] := Block[{x,y,z,m,y2,s},
\tx = pt[[1]]; y = pt[[2]]; z = pt[[3]];
\tIf[(y==0) || (z==0), Return[{1,1,0}]];
\tm = Mod[3 x^2 + a Mod[Mod[z^2,p]^2,p],p];
\tz = Mod[2 y z, p];
\ty2 = Mod[y^2,p];
\ts = Mod[4 x y2,p]; 
\tx = Mod[m^2 - 2s,p];
\ty = Mod[m(s - x) - 8 y2^2,p];
\tReturn[{x,y,z}];
];

elladd[pt0_, pt1_] := Block[
\t{x0,y0,z0,x1,y1,z1,
\tt1,t2,t3,t4,t5,t6,t7},
\tx0 = pt0[[1]]; y0 = pt0[[2]]; z0 = pt0[[3]];
\tx1 = pt1[[1]]; y1 = pt1[[2]]; z1 = pt1[[3]];
\tIf[z0 == 0, Return[pt1]];
\tIf[z1 == 0, Return[pt0]];

\tt1 = x0;
\tt2 = y0;
\tt3 = z0;
\tt4 = x1;
\tt5 = y1;
\tIf[(z1 != 1),
\t\tt6 = z1;
\t\tt7 = Mod[t6^2, p];
\t\tt1 = Mod[t1 t7, p];
\t\tt7 = Mod[t6 t7, p];
\t\tt2 = Mod[t2 t7, p];
\t];
\tt7 = Mod[t3^2, p];
\tt4 = Mod[t4 t7, p];
\tt7 = Mod[t3 t7, p];
\tt5 = Mod[t5 t7, p];
\tt4 = Mod[t1-t4, p];
\tt5 = Mod[t2 - t5, p];
\tIf[t4 == 0, If[t5 == 0,
\t\t\t\t    Return[elldouble[pt0]],
\t   \t\t\t\tReturn[{1,1,0}]
\t   \t\t\t]
\t];
\tt1 = Mod[2t1 - t4,p];
\tt2 = Mod[2t2 - t5, p];
\tIf[z1 != 1, t3 = Mod[t3 t6, p]];
\tt3 = Mod[t3 t4, p];
\tt7 = Mod[t4^2, p];
\tt4 = Mod[t4 t7, p];
\tt7 = Mod[t1 t7, p];
\tt1 = Mod[t5^2, p];
\tt1 = Mod[t1-t7, p];
\tt7 = Mod[t7 - 2t1, p];
\tt5 = Mod[t5 t7, p];
\tt4 = Mod[t2 t4, p];
\tt2 = Mod[t5-t4, p];
\tIf[EvenQ[t2], t2 = t2/2, t2 = (p+t2)/2];
\tReturn[{t1, t2, t3}];
];
\t\t
(* Next, elliptic-multiply a normalized pt by k. *)
elliptic[pt_, k_] := Block[{pt2, hh, kk, hb, kb, lenh, lenk},
\tIf[k==0, Return[{1,1,0}]];
\thh = Reverse[bitList[3k]];
\tkk = Reverse[bitList[k]];
\tpt2 = pt;
\tlenh = Length[hh];
\tlenk = Length[kk];
\tDo[
\t\tpt2 = elldouble[pt2];
\t\thb = hh[[b]];
\t\tIf[b <= lenk, kb = kk[[b]], kb = 0];
\t\tIf[{hb,kb} == {1,0},
\t\t\tpt2 = elladd[pt2, pt],
\t\t\tIf[{hb, kb} == {0,1},
\t\t\tpt2 = ellsub[pt2, pt]]
\t\t]
\t   ,{b, lenh-1, 2,-1}
\t ];
\tReturn[pt2];
];

(* Next, provide point-finding functions. *)

(* Next, perform (a + b w)^n (mod p), where pair = {a,b}, w2 = w^2. *)
pow[pair_, w2_, n_, p_] := Block[{bitlist, z},
    bitlist = bitList[n];
    z = pair;
\tDo[\t
\t   zi = Mod[z[[2]]^2,p];
\t   z = {Mod[z[[1]]^2 + w2 zi, p], Mod[2 z[[1]] z[[2]], p]};   
\t   If[bitlist[[q]] == 1,
\t       zi = Mod[pair[[2]] z[[2]], p];
\t   \t   z = {Mod[pair[[1]] z[[1]] + w2 zi, p],
\t   \t         Mod[pair[[1]] z[[2]] + pair[[2]] z[[1]], p]};
\t   ],
\t   {q,2,Length[bitlist]}
    ];
    Return[z]
];


sqrt[x_, p_] := Module[{t, b, w2},
    If[Mod[x,p] == 0, Return[0]];
\tIf[Mod[p,4] == 3, Return[PowerMod[x, (p+1)/4, p]]];
\tIf[Mod[p,8] == 5,
\t\tb = PowerMod[x, (p-1)/4, p];
\t\tIf[b==1, Return[PowerMod[x, (p+3)/8, p]],
\t\t\tReturn[Mod[2x PowerMod[4x, (p-5)/8,p],p]]
\t\t]
\t];
\tt = 2;
    While[True,
      w2 = Mod[t^2 - x, p];
      If[JacobiSymbol[w2,p] == -1, Break[]];
      ++t
    ];
    (* Next, raise (t + Sqrt[w2])^((p+1)/2). *)
    t = pow[{t,1},w2, (p+1)/2, p];
    Return[t[[1]]];
    ];

findpoint[start_] := Block[{x = start, y, s},
\tWhile[True,
\t   s = Mod[x(Mod[x^2+a,p]) + b, p];
\t   y = sqrt[s, p];
\t   If[Mod[y^2, p] == s, Break[]];
\t   ++x;
\t];
\tReturn[{x, y, 1}]
];

report[a_] := Module[{ia = IntegerDigits[a,65536]},    
      Prepend[Reverse[ia], Length[ia]]
      ];
    \
\>", "Input",
  AspectRatioFixed->True],

Cell[CellGroupData[{

Cell["\<\



report[a_] := Module[{ia = IntegerDigits[a,65536]},    
      Prepend[Reverse[ia], Length[ia]]
      ];
    
    
(* Case of Weierstrass/feemod curve. *)
p = 2^127 + 57675
report[p]
r = 512000; s = 512001;

a = Mod[-3 r s^3, p]
report[a]
b = Mod[-2 r s^5, p]
report[b]
pt = findpoint[3];
pt
plusOrd = 170141183460469231756943134065055014407
report[plusOrd]
PrineQ[plusOrd]
minusOrd = 170141183460469231706431473366713312401
report[minusOrd]
PrimeQ[minusOrd]
elliptic[pt, plusOrd]
elliptic[pt, minusOrd]\
\>", "Input",
  AspectRatioFixed->True],

Cell[BoxData[
    \(170141183460469025572049133804586627403\)], "Output"],

Cell[BoxData[
    \({8, 29003, 44777, 29962, 4169, 54360, 65535, 65535, 32767}\)], "Output"],

Cell[BoxData[
    \(170105154311605172483148226534443139403\)], "Output"],

Cell[BoxData[
    \({8, 16715, 42481, 16221, 60523, 56573, 13644, 4000, 32761}\)], "Output"],

Cell[BoxData[
    \(Reverse::"normal" \( : \ \) 
      "Nonatomic expression expected at position \!\(1\) in \
\!\(Reverse[ib]\)."\)], "Message"],

Cell[BoxData[
    \(Join::"heads" \( : \ \) 
      "Heads \!\(List\) and \!\(Reverse\) at positions \!\(1\) and \!\(2\) \
are expected to be the same."\)], "Message"],

Cell[BoxData[
    \(Join[{0}, Reverse[ib]]\)], "Output"],

Cell[BoxData[
    \({6, 30690820274365139284340271178980469693, 1}\)], "Output"],

Cell[BoxData[
    \({1, 1, 0}\)], "Output"],

Cell[BoxData[
    \({29855379595419734109449938959593549451, 
      71894799143021275114012027736812077762, 
      78629090074833058028405436736324079039}\)], "Output"],

Cell[CellGroupData[{

Cell[BoxData[{
    \( (*\ Case\ of\ Weierstrass/gen . \ mod\ \(curve . \)\ *) \n
    p\  = \ 1654338658923174831024422729553880293604080853451; \n
    Mod[p, 4]\), 
    \(Length[IntegerDigits[p, 2]]\), 
    \(report[p]\), 
    \(PrimeQ[p]\n\n\), 
    \(a\  = \ \(-152\); \nreport[a]\), 
    \(b\  = \ Mod[722, \ p]\), 
    \(report[b]\), 
    \(ptplus\  = \ 
      findpoint[1245904487553815885170631576005220733978383542270]\), 
    \(ptminus\  = \ 
      findpoint[1173563507729187954550227059395955904200719019884]\), 
    \(plusOrd\  = \ \ 1654338658923174831024425147405519522862430265804; \n
    report[plusOrd]\), 
    \(PrimeQ[plusOrd]\), 
    \(minusOrd\  = \ 2  p + 2\  - \ plusOrd\), 
    \(report[minusOrd]\), 
    \(PrimeQ[minusOrd]\n\), 
    \(pt2\  = \ 
      elliptic[ptplus, \ plusOrd/\((2^2\ *\ 23\ *\ 359\ *\ 479\ *\ 102107)\)]
        \), 
    \(pt3\  = \ elliptic[ptminus, \ minusOrd/\((2^2\ *\ 5^2\ *\ 17^2)\)]\)}], 
  "Input"],

Cell[BoxData[
    \(3\)], "Output"],

Cell[BoxData[
    \(161\)], "Output"],

Cell[BoxData[
    \({11, 41419, 58349, 36408, 14563, 25486, 9098, 29127, 50972, 7281, 8647, 
      1}\)], "Output"],

Cell[BoxData[
    \(True\)], "Output"],

Cell[BoxData[
    \({1, 152}\)], "Output"],

Cell[BoxData[
    \(722\)], "Output"],

Cell[BoxData[
    \({1, 722}\)], "Output"],

Cell[BoxData[
    \({1245904487553815885170631576005220733978383542270, 
      560361014661268580786436670038204012763093444403, 1}\)], "Output"],

Cell[BoxData[
    \({1173563507729187954550227059395955904200719019885, 
      1175039848591896005104837959278049495835875105211, 1}\)], "Output"],

Cell[BoxData[
    \({11, 41420, 58349, 36408, 14563, 25486, 9100, 29127, 50972, 7281, 8647, 
      1}\)], "Output"],

Cell[BoxData[
    \(False\)], "Output"],

Cell[BoxData[
    \(1654338658923174831024420311702241064345731441100\)], "Output"],

Cell[BoxData[
    \({11, 41420, 58349, 36408, 14563, 25486, 9096, 29127, 50972, 7281, 8647, 
      1}\)], "Output"],

Cell[BoxData[
    \(False\)], "Output"],

Cell[BoxData[
    \({1, 1, 0}\)], "Output"],

Cell[BoxData[
    \({1190583420013022954017374261618382173651469909929, 
      629194203259568943908951973353992532594049316627, 
      1243063853191133727091858197899695654928311311960}\)], "Output"]
}, Open  ]]
}, Open  ]],

Cell[CellGroupData[{

Cell["\<\

    
(* Case of Weierstrass/feemod curve. *)
p = 2^160 + 5875
report[p]
PrimeQ[p]
r = 512; s = 513;

a = Mod[-3 r s^3, p]
report[a]
b = Mod[2 r s^5, p]
report[b]
pt = findpoint[3];
pt
plusOrd =  1461501637330902918203687223801810245920805144027
report[plusOrd]
PrimeQ[plusOrd]
minusOrd = 1461501637330902918203682441630755793391059953677
report[minusOrd]
PrimeQ[minusOrd]

elliptic[pt, plusOrd]
elliptic[pt, minusOrd]\
\>", "Input",
  AspectRatioFixed->True],

Cell[BoxData[
    \(1461501637330902918203684832716283019655932548851\)], "Output"],

Cell[BoxData[
    \({11, 5875, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}\)], "Output"],

Cell[BoxData[
    \(True\)], "Output"],

Cell[BoxData[
    \(1461501637330902918203684832716283019448563798259\)], "Output"],

Cell[BoxData[
    \({11, 4339, 47068, 65487, 65535, 65535, 65535, 65535, 65535, 65535, 
      65535, 0}\)], "Output"],

Cell[BoxData[
    \(36382017816364032\)], "Output"],

Cell[BoxData[
    \({4, 1024, 41000, 16704, 129}\)], "Output"],

Cell[BoxData[
    \({7, 1141381147330837701163756056508811445797829159301, 1}\)], "Output"],

Cell[BoxData[
    \(1461501637330902918203687223801810245920805144027\)], "Output"],

Cell[BoxData[
    \({11, 50651, 30352, 49719, 403, 64085, 1, 0, 0, 0, 0, 1}\)], "Output"],

Cell[BoxData[
    \(True\)], "Output"],

Cell[BoxData[
    \(1461501637330902918203682441630755793391059953677\)], "Output"],

Cell[BoxData[
    \({11, 26637, 35183, 15816, 65132, 1450, 65534, 65535, 65535, 65535, 
      65535, 0}\)], "Output"],

Cell[BoxData[
    \(True\)], "Output"],

Cell[BoxData[
    \({1, 1, 0}\)], "Output"],

Cell[BoxData[
    \({626678646813931825585362114548610779332932369721, 
      425645027836716936906396416648647850487040622280, 
      374678203163702432662589149043052098374578486466}\)], "Output"]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData[{
    \( (*\ Case\ of\ NIST\ P - 192. \ *) \n
    p\  = \ 6277101735386680763835789423207666416083908700390324961279; \n
    Mod[p, 4]\), 
    \(Length[IntegerDigits[p, 2]]\), 
    \(report[p]\), 
    \(PrimeQ[p]\n\n\), 
    \(a\  = \ \(-3\); \nreport[a]\), 
    \(b\  = \ 
      Mod[\(-2455155546008943817740293915197451784769108058161191238065\), \ 
        p]\), 
    \(report[b]\), 
    \(pt\  = \ findpoint[3]; \npt\), 
    \(plusOrd\  = \ \ 
      6277101735386680763835789423176059013767194773182842284081\), 
    \(report[plusOrd]\), 
    \(PrimeQ[plusOrd]\), 
    \(minusOrd\  = \ 2  p + 2\  - \ plusOrd\), 
    \(report[minusOrd]\), 
    \(PrimeQ[minusOrd]\), 
    \(elliptic[pt, \ plusOrd]\), 
    \(pt2\  = \ elliptic[pt, \ 23]\), 
    \(pt\  = \ elliptic[pt2, \ minusOrd/23]\), 
    \(report[minusOrd/23]\)}], "Input"],

Cell[BoxData[
    \(3\)], "Output"],

Cell[BoxData[
    \(192\)], "Output"],

Cell[BoxData[
    \({12, 65535, 65535, 65535, 65535, 65534, 65535, 65535, 65535, 65535, 
      65535, 65535, 65535}\)], "Output"],

Cell[BoxData[
    \(True\)], "Output"],

Cell[BoxData[
    \({1, 3}\)], "Output"],

Cell[BoxData[
    \(3821946189377736946095495508010214631314800642229133723214\)], "Output"],

Cell[BoxData[
    \({12, 17998, 16057, 8467, 327, 53173, 36315, 5716, 61528, 32536, 6755, 
      64230, 39902}\)], "Output"],

Cell[BoxData[
    \({3, 2573760116079900500718205355717584033158714840310676461950, 1}\)], 
  "Output"],

Cell[BoxData[
    \(6277101735386680763835789423176059013767194773182842284081\)], "Output"],

Cell[BoxData[
    \({12, 10289, 46290, 51633, 5227, 63542, 39390, 65535, 65535, 65535, 
      65535, 65535, 65535}\)], "Output"],

Cell[BoxData[
    \(True\)], "Output"],

Cell[BoxData[
    \(6277101735386680763835789423239273818400622627597807638479\)], "Output"],

Cell[BoxData[
    \({12, 55247, 19245, 13902, 60308, 1991, 26145, 0, 0, 0, 0, 0, 0}\)], 
  "Output"],

Cell[BoxData[
    \(False\)], "Output"],

Cell[BoxData[
    \({1974979226733528697945860683178722101664119564992975891016, 
      4098724835649872426757510355842063594543191498480025032993, 
      6276809135556566751199297417037505266020088100630063387404}\)], "Output"],

Cell[BoxData[
    \({4331701396234773295967464070295991827703321716502384917379, 
      6038875199291747318091498070766965234564517946489302751105, 
      2975197300407214290225034931542769825877023149833302700493}\)], "Output"],

Cell[BoxData[
    \({1, 1, 0}\)], "Output"],

Cell[BoxData[
    \({12, 16649, 40728, 9152, 53911, 59923, 9684, 22795, 17096, 45590, 
      34192, 25644, 2849}\)], "Output"]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData[
    \(normalize[pt2]\)], "Input"],

Cell[BoxData[
    \({572757471182948021179439097275935071491066938838024362853, 
      1582598775998321197887787208733859332485461160705858323879, 1}\)], 
  "Output"],

Cell[CellGroupData[{

Cell[BoxData[
    \(report[%[\([1]\)]]\)], "Input"],

Cell[BoxData[
    \({12, 39781, 2122, 19172, 23122, 40686, 43699, 10062, 14682, 25122, 
      55271, 56820, 5979}\)], "Output"]
}, Open  ]]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData[{
    \(minusOrd\), 
    \(plusOrd\)}], "Input"],

Cell[BoxData[
    \(6277101735386680763835789423239273818400622627597807638479\)], "Output"],

Cell[BoxData[
    \(6277101735386680763835789423176059013767194773182842284081\)], "Output"]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData[
    \(IntegerDigits[13, 2]\)], "Input"],

Cell[BoxData[
    \({1, 1, 0, 1}\)], "Output"]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData[{
    \(minusOrd/23\), 
    \(\treport[minusOrd/23]\)}], "Input"],

Cell[BoxData[
    \(272917466755942641905903887966924948626114027286861201673\)], "Output"],

Cell[BoxData[
    \({12, 16649, 40728, 9152, 53911, 59923, 9684, 22795, 17096, 45590, 
      34192, 25644, 2849}\)], "Output"]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData[
    \(ord\  = \ 1024120625531724089187207582052247831; \n
    Floor[4^Length[IntegerDigits[plusOrd, \ 2]]/plusOrd]\)], "Input"],

Cell[BoxData[
    \(5846006549323611672814729766523023173564239767715\)], "Output"]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData[
    \(report[%]\)], "Input"],

Cell[BoxData[
    \({11, 59555, 9660, 63266, 63920, 5803, 65528, 65535, 65535, 65535, 
      65535, 3}\)], "Output"]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData[
    \(IntegerDigits[
      6277101735386680763835789423207666416083908700390324961279, 2]\)], 
  "Input"],

Cell[BoxData[
    \({1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
      1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
      1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
      1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
      1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
      1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
      1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
      1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
      1}\)], "Output"]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData[{
    \(a\), 
    \(b\), 
    \(JacobiSymbol[3^3\  + \ a\ *\ 3\  - \ b, \ p]\)}], "Input"],

Cell[BoxData[
    \(\(-3\)\)], "Output"],

Cell[BoxData[
    \(3821946189377736946095495508010214631314800642229133723214\)], "Output"],

Cell[BoxData[
    \(1\)], "Output"]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData[
    \(minusOrd\)], "Input"],

Cell[BoxData[
    \(6277101735386680763835789423239273818400622627597807638479\)], "Output"]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData[
    \(o\  = 272917466755942641905903887966924948626114027286861201673; \n
    Floor[4^Length[IntegerDigits[o, 2]]/o]\)], "Input"],

Cell[BoxData[
    \(563958359038647099875871705988474052021461054728890671516\)], "Output"]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData[
    \(report[%]\)], "Input"],

Cell[BoxData[
    \({12, 57756, 63294, 44830, 2517, 2125, 63187, 65535, 65535, 65535, 
      65535, 65535, 5887}\)], "Output"]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData[
    \(IntegerDigits[1654338658923174831024422729553880293604080853451, 2]\)], 
  "Input"],

Cell[BoxData[
    \({1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 
      0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 
      0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 
      1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 
      1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 
      1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 
      0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1}\)], "Output"]
}, Open  ]]
},
FrontEndVersion->"NeXT 3.0",
ScreenRectangle->{{0, 957}, {0, 768}},
WindowToolbars->{},
CellGrouping->Manual,
WindowSize->{520, 600},
WindowMargins->{{Automatic, 44}, {-10, Automatic}},
PrivateNotebookOptions->{"ColorPalette"->{RGBColor, -1}},
ShowCellLabel->True,
ShowCellTags->False,
RenderingOptions->{"ObjectDithering"->True,
"RasterDithering"->False}
]


(***********************************************************************
Cached data follows.  If you edit this Notebook file directly, not using
Mathematica, you must remove the line containing CacheID at the top of 
the file.  The cache data will then be recreated when you save this file 
from within Mathematica.
***********************************************************************)

(*CellTagsOutline
CellTagsIndex->{}
*)

(*CellTagsIndex
CellTagsIndex->{}
*)

(*NotebookFileOutline
Notebook[{
Cell[1709, 49, 4062, 173, 2136, "Input"],

Cell[CellGroupData[{
Cell[5796, 226, 556, 29, 336, "Input"],
Cell[6355, 257, 73, 1, 24, "Output"],
Cell[6431, 260, 92, 1, 24, "Output"],
Cell[6526, 263, 73, 1, 24, "Output"],
Cell[6602, 266, 92, 1, 24, "Output"],
Cell[6697, 269, 145, 3, 33, "Message"],
Cell[6845, 274, 166, 3, 33, "Message"],
Cell[7014, 279, 56, 1, 24, "Output"],
Cell[7073, 282, 80, 1, 24, "Output"],
Cell[7156, 285, 43, 1, 24, "Output"],
Cell[7202, 288, 168, 3, 50, "Output"],

Cell[CellGroupData[{
Cell[7395, 295, 949, 24, 381, "Input"],
Cell[8347, 321, 35, 1, 24, "Output"],
Cell[8385, 324, 37, 1, 24, "Output"],
Cell[8425, 327, 115, 2, 37, "Output"],
Cell[8543, 331, 38, 1, 24, "Output"],
Cell[8584, 334, 42, 1, 24, "Output"],
Cell[8629, 337, 37, 1, 24, "Output"],
Cell[8669, 340, 42, 1, 24, "Output"],
Cell[8714, 343, 145, 2, 37, "Output"],
Cell[8862, 347, 146, 2, 37, "Output"],
Cell[9011, 351, 115, 2, 37, "Output"],
Cell[9129, 355, 39, 1, 24, "Output"],
Cell[9171, 358, 83, 1, 24, "Output"],
Cell[9257, 361, 115, 2, 37, "Output"],
Cell[9375, 365, 39, 1, 24, "Output"],
Cell[9417, 368, 43, 1, 24, "Output"],
Cell[9463, 371, 200, 3, 50, "Output"]
}, Open  ]]
}, Open  ]],

Cell[CellGroupData[{
Cell[9712, 380, 469, 25, 312, "Input"],
Cell[10184, 407, 83, 1, 24, "Output"],
Cell[10270, 410, 74, 1, 24, "Output"],
Cell[10347, 413, 38, 1, 24, "Output"],
Cell[10388, 416, 83, 1, 24, "Output"],
Cell[10474, 419, 117, 2, 37, "Output"],
Cell[10594, 423, 51, 1, 24, "Output"],
Cell[10648, 426, 62, 1, 24, "Output"],
Cell[10713, 429, 91, 1, 24, "Output"],
Cell[10807, 432, 83, 1, 24, "Output"],
Cell[10893, 435, 89, 1, 24, "Output"],
Cell[10985, 438, 38, 1, 24, "Output"],
Cell[11026, 441, 83, 1, 24, "Output"],
Cell[11112, 444, 117, 2, 37, "Output"],
Cell[11232, 448, 38, 1, 24, "Output"],
Cell[11273, 451, 43, 1, 24, "Output"],
Cell[11319, 454, 198, 3, 50, "Output"]
}, Open  ]],

Cell[CellGroupData[{
Cell[11554, 462, 844, 23, 420, "Input"],
Cell[12401, 487, 35, 1, 24, "Output"],
Cell[12439, 490, 37, 1, 24, "Output"],
Cell[12479, 493, 129, 2, 37, "Output"],
Cell[12611, 497, 38, 1, 24, "Output"],
Cell[12652, 500, 40, 1, 24, "Output"],
Cell[12695, 503, 92, 1, 24, "Output"],
Cell[12790, 506, 124, 2, 37, "Output"],
Cell[12917, 510, 103, 2, 50, "Output"],
Cell[13023, 514, 92, 1, 24, "Output"],
Cell[13118, 517, 128, 2, 37, "Output"],
Cell[13249, 521, 38, 1, 24, "Output"],
Cell[13290, 524, 92, 1, 24, "Output"],
Cell[13385, 527, 100, 2, 24, "Output"],
Cell[13488, 531, 39, 1, 24, "Output"],
Cell[13530, 534, 228, 3, 89, "Output"],
Cell[13761, 539, 228, 3, 89, "Output"],
Cell[13992, 544, 43, 1, 24, "Output"],
Cell[14038, 547, 126, 2, 37, "Output"]
}, Open  ]],

Cell[CellGroupData[{
Cell[14201, 554, 47, 1, 25, "Input"],
Cell[14251, 557, 166, 3, 63, "Output"],

Cell[CellGroupData[{
Cell[14442, 564, 51, 1, 25, "Input"],
Cell[14496, 567, 127, 2, 37, "Output"]
}, Open  ]]
}, Open  ]],

Cell[CellGroupData[{
Cell[14672, 575, 61, 2, 38, "Input"],
Cell[14736, 579, 92, 1, 24, "Output"],
Cell[14831, 582, 92, 1, 24, "Output"]
}, Open  ]],

Cell[CellGroupData[{
Cell[14960, 588, 53, 1, 25, "Input"],
Cell[15016, 591, 46, 1, 24, "Output"]
}, Open  ]],

Cell[CellGroupData[{
Cell[15099, 597, 78, 2, 38, "Input"],
Cell[15180, 601, 91, 1, 24, "Output"],
Cell[15274, 604, 126, 2, 37, "Output"]
}, Open  ]],

Cell[CellGroupData[{
Cell[15437, 611, 141, 2, 38, "Input"],
Cell[15581, 615, 83, 1, 24, "Output"]
}, Open  ]],

Cell[CellGroupData[{
Cell[15701, 621, 42, 1, 25, "Input"],
Cell[15746, 624, 116, 2, 37, "Output"]
}, Open  ]],

Cell[CellGroupData[{
Cell[15899, 631, 119, 3, 51, "Input"],
Cell[16021, 636, 666, 9, 128, "Output"]
}, Open  ]],

Cell[CellGroupData[{
Cell[16724, 650, 103, 3, 51, "Input"],
Cell[16830, 655, 40, 1, 24, "Output"],
Cell[16873, 658, 92, 1, 24, "Output"],
Cell[16968, 661, 35, 1, 24, "Output"]
}, Open  ]],

Cell[CellGroupData[{
Cell[17040, 667, 41, 1, 24, "Input"],
Cell[17084, 670, 92, 1, 24, "Output"]
}, Open  ]],

Cell[CellGroupData[{
Cell[17213, 676, 143, 2, 64, "Input"],
Cell[17359, 680, 91, 1, 24, "Output"]
}, Open  ]],

Cell[CellGroupData[{
Cell[17487, 686, 42, 1, 25, "Input"],
Cell[17532, 689, 126, 2, 37, "Output"]
}, Open  ]],

Cell[CellGroupData[{
Cell[17695, 696, 103, 2, 38, "Input"],
Cell[17801, 700, 559, 7, 115, "Output"]
}, Open  ]]
}
]
*)




(***********************************************************************
End of Mathematica Notebook file.
***********************************************************************)