亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? gf2ex.cpp

?? 一個比較通用的大數運算庫
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
      Error("div: division by zero");

   q = a;
}

void div(GF2EX& q, const GF2EX& a, long b)
{
   if ((b & 1) == 0)
      Error("div: division by zero");

   q = a;
}
   


void rem(GF2EX& r, const GF2EX& a, const GF2EX& b)
{
   long sa = a.rep.length();
   long sb = b.rep.length();

   if (sb < GF2E::DivCross() || sa-sb < GF2E::DivCross())
      PlainRem(r, a, b);
   else if (sa < 4*sb)
      UseMulRem(r, a, b);
   else {
      GF2EXModulus B;
      build(B, b);
      rem(r, a, B);
   }
}


void diff(GF2EX& x, const GF2EX& a)
{
   long n = deg(a);
   long i;

   if (n <= 0) {
      clear(x);
      return;
   }

   if (&x != &a)
      x.rep.SetLength(n);

   for (i = 0; i <= n-1; i++) {
      if ((i+1)&1)
         x.rep[i] = a.rep[i+1];
      else
         clear(x.rep[i]);
   }

   if (&x == &a)
      x.rep.SetLength(n);

   x.normalize();
}


void RightShift(GF2EX& x, const GF2EX& a, long n)
{
   if (IsZero(a)) {
      clear(x);
      return;
   }

   if (n < 0) {
      if (n < -NTL_MAX_LONG) Error("overflow in RightShift");
      LeftShift(x, a, -n);
      return;
   }

   long da = deg(a);
   long i;
 
   if (da < n) {
      clear(x);
      return;
   }

   if (&x != &a)
      x.rep.SetLength(da-n+1);

   for (i = 0; i <= da-n; i++)
      x.rep[i] = a.rep[i+n];

   if (&x == &a)
      x.rep.SetLength(da-n+1);

   x.normalize();
}

void LeftShift(GF2EX& x, const GF2EX& a, long n)
{
   if (IsZero(a)) {
      clear(x);
      return;
   }

   if (n < 0) {
      if (n < -NTL_MAX_LONG) 
         clear(x);
      else
         RightShift(x, a, -n);
      return;
   }

   if (NTL_OVERFLOW(n, 1, 0))
      Error("overflow in LeftShift");

   long m = a.rep.length();

   x.rep.SetLength(m+n);

   long i;
   for (i = m-1; i >= 0; i--)
      x.rep[i+n] = a.rep[i];

   for (i = 0; i < n; i++)
      clear(x.rep[i]);
}


void ShiftAdd(GF2EX& U, const GF2EX& V, long n)
// assumes input does not alias output
{
   if (IsZero(V))
      return;

   long du = deg(U);
   long dv = deg(V);

   long d = max(du, n+dv);

   U.rep.SetLength(d+1);
   long i;

   for (i = du+1; i <= d; i++)
      clear(U.rep[i]);

   for (i = 0; i <= dv; i++)
      add(U.rep[i+n], U.rep[i+n], V.rep[i]);

   U.normalize();
}

NTL_vector_impl(GF2EX,vec_GF2EX)

NTL_eq_vector_impl(GF2EX,vec_GF2EX)

NTL_io_vector_impl(GF2EX,vec_GF2EX)




void IterBuild(GF2E* a, long n)
{
   long i, k;
   GF2E b, t;

   if (n <= 0) return;

   for (k = 1; k <= n-1; k++) {
      b = a[k];
      add(a[k], b, a[k-1]);
      for (i = k-1; i >= 1; i--) {
         mul(t, a[i], b);
         add(a[i], t, a[i-1]);
      }
      mul(a[0], a[0], b);
   }
} 



void BuildFromRoots(GF2EX& x, const vec_GF2E& a)
{
   long n = a.length();

   if (n == 0) {
      set(x);
      return;
   }

   x.rep.SetMaxLength(n+1);
   x.rep = a;
   IterBuild(&x.rep[0], n);
   x.rep.SetLength(n+1);
   SetCoeff(x, n);
}



void eval(GF2E& b, const GF2EX& f, const GF2E& a)
// does a Horner evaluation
{
   GF2E acc;
   long i;

   clear(acc);
   for (i = deg(f); i >= 0; i--) {
      mul(acc, acc, a);
      add(acc, acc, f.rep[i]);
   }

   b = acc;
}



void eval(vec_GF2E& b, const GF2EX& f, const vec_GF2E& a)
// naive algorithm:  repeats Horner
{
   if (&b == &f.rep) {
      vec_GF2E bb;
      eval(bb, f, a);
      b = bb;
      return;
   }

   long m = a.length();
   b.SetLength(m);
   long i;
   for (i = 0; i < m; i++) 
      eval(b[i], f, a[i]);
}




void interpolate(GF2EX& f, const vec_GF2E& a, const vec_GF2E& b)
{
   long m = a.length();
   if (b.length() != m) Error("interpolate: vector length mismatch");

   if (m == 0) {
      clear(f);
      return;
   }

   vec_GF2E prod;
   prod = a;

   GF2E t1, t2;

   long k, i;

   vec_GF2E res;
   res.SetLength(m);

   for (k = 0; k < m; k++) {

      const GF2E& aa = a[k];

      set(t1);
      for (i = k-1; i >= 0; i--) {
         mul(t1, t1, aa);
         add(t1, t1, prod[i]);
      }

      clear(t2);
      for (i = k-1; i >= 0; i--) {
         mul(t2, t2, aa);
         add(t2, t2, res[i]);
      }


      inv(t1, t1);
      sub(t2, b[k], t2);
      mul(t1, t1, t2);

      for (i = 0; i < k; i++) {
         mul(t2, prod[i], t1);
         add(res[i], res[i], t2);
      }

      res[k] = t1;

      if (k < m-1) {
         if (k == 0)
            negate(prod[0], prod[0]);
         else {
            negate(t1, a[k]);
            add(prod[k], t1, prod[k-1]);
            for (i = k-1; i >= 1; i--) {
               mul(t2, prod[i], t1);
               add(prod[i], t2, prod[i-1]);
            }
            mul(prod[0], prod[0], t1);
         }
      }
   }

   while (m > 0 && IsZero(res[m-1])) m--;
   res.SetLength(m);
   f.rep = res;
}

   
void InnerProduct(GF2EX& x, const vec_GF2E& v, long low, long high, 
                   const vec_GF2EX& H, long n, GF2XVec& t)
{
   GF2X s;
   long i, j;

   for (j = 0; j < n; j++)
      clear(t[j]);

   high = min(high, v.length()-1);
   for (i = low; i <= high; i++) {
      const vec_GF2E& h = H[i-low].rep;
      long m = h.length();
      const GF2X& w = rep(v[i]);

      for (j = 0; j < m; j++) {
         mul(s, w, rep(h[j]));
         add(t[j], t[j], s);
      }
   }

   x.rep.SetLength(n);
   for (j = 0; j < n; j++)
      conv(x.rep[j], t[j]);
   x.normalize();
}


void CompMod(GF2EX& x, const GF2EX& g, const GF2EXArgument& A, 
             const GF2EXModulus& F)
{
   if (deg(g) <= 0) {
      x = g;
      return;
   }


   GF2EX s, t;
   GF2XVec scratch(F.n, 2*GF2E::WordLength());

   long m = A.H.length() - 1;
   long l = ((g.rep.length()+m-1)/m) - 1;

   const GF2EX& M = A.H[m];

   InnerProduct(t, g.rep, l*m, l*m + m - 1, A.H, F.n, scratch);
   for (long i = l-1; i >= 0; i--) {
      InnerProduct(s, g.rep, i*m, i*m + m - 1, A.H, F.n, scratch);
      MulMod(t, t, M, F);
      add(t, t, s);
   }

   x = t;
}


void build(GF2EXArgument& A, const GF2EX& h, const GF2EXModulus& F, long m)
{
   long i;

   if (m <= 0 || deg(h) >= F.n)
      Error("build GF2EXArgument: bad args");

   if (m > F.n) m = F.n;

   if (GF2EXArgBound > 0) {
      double sz = GF2E::storage();
      sz = sz*F.n;
      sz = sz + NTL_VECTOR_HEADER_SIZE + sizeof(vec_GF2E);
      sz = sz/1024;
      m = min(m, long(GF2EXArgBound/sz));
      m = max(m, 1);
   }

   A.H.SetLength(m+1);

   set(A.H[0]);
   A.H[1] = h;
   for (i = 2; i <= m; i++) 
      MulMod(A.H[i], A.H[i-1], h, F);
}




long GF2EXArgBound = 0;


void CompMod(GF2EX& x, const GF2EX& g, const GF2EX& h, const GF2EXModulus& F)
   // x = g(h) mod f
{
   long m = SqrRoot(g.rep.length());

   if (m == 0) {
      clear(x);
      return;
   }

   GF2EXArgument A;

   build(A, h, F, m);

   CompMod(x, g, A, F);
}




void Comp2Mod(GF2EX& x1, GF2EX& x2, const GF2EX& g1, const GF2EX& g2,
              const GF2EX& h, const GF2EXModulus& F)

{
   long m = SqrRoot(g1.rep.length() + g2.rep.length());

   if (m == 0) {
      clear(x1);
      clear(x2);
      return;
   }

   GF2EXArgument A;

   build(A, h, F, m);

   GF2EX xx1, xx2;

   CompMod(xx1, g1, A, F);
   CompMod(xx2, g2, A, F);

   x1 = xx1;
   x2 = xx2;
}

void Comp3Mod(GF2EX& x1, GF2EX& x2, GF2EX& x3, 
              const GF2EX& g1, const GF2EX& g2, const GF2EX& g3,
              const GF2EX& h, const GF2EXModulus& F)

{
   long m = SqrRoot(g1.rep.length() + g2.rep.length() + g3.rep.length());

   if (m == 0) {
      clear(x1);
      clear(x2);
      clear(x3);
      return;
   }

   GF2EXArgument A;

   build(A, h, F, m);

   GF2EX xx1, xx2, xx3;

   CompMod(xx1, g1, A, F);
   CompMod(xx2, g2, A, F);
   CompMod(xx3, g3, A, F);

   x1 = xx1;
   x2 = xx2;
   x3 = xx3;
}





void build(GF2EXTransMultiplier& B, const GF2EX& b, const GF2EXModulus& F)
{
   long db = deg(b);

   if (db >= F.n) Error("build TransMultiplier: bad args");

   GF2EX t;

   LeftShift(t, b, F.n-1);
   div(t, t, F);

   // we optimize for low degree b

   long d;

   d = deg(t);
   if (d < 0)
      B.shamt_fbi = 0;
   else
      B.shamt_fbi = F.n-2 - d; 

   CopyReverse(B.fbi, t, d);

   // The following code optimizes the case when 
   // f = X^n + low degree poly

   trunc(t, F.f, F.n);
   d = deg(t);
   if (d < 0)
      B.shamt = 0;
   else
      B.shamt = d;

   CopyReverse(B.f0, t, d);

   if (db < 0)
      B.shamt_b = 0;
   else
      B.shamt_b = db;

   CopyReverse(B.b, b, db);
}

void TransMulMod(GF2EX& x, const GF2EX& a, const GF2EXTransMultiplier& B,
               const GF2EXModulus& F)
{
   if (deg(a) >= F.n) Error("TransMulMod: bad args");

   GF2EX t1, t2;

   mul(t1, a, B.b);
   RightShift(t1, t1, B.shamt_b);

   mul(t2, a, B.f0);
   RightShift(t2, t2, B.shamt);
   trunc(t2, t2, F.n-1);

   mul(t2, t2, B.fbi);
   if (B.shamt_fbi > 0) LeftShift(t2, t2, B.shamt_fbi);
   trunc(t2, t2, F.n-1);
   LeftShift(t2, t2, 1);

   add(x, t1, t2);
}


void UpdateMap(vec_GF2E& x, const vec_GF2E& a, 
         const GF2EXTransMultiplier& B, const GF2EXModulus& F)
{
   GF2EX xx;
   TransMulMod(xx, to_GF2EX(a), B, F);
   x = xx.rep;
}
   


static
void ProjectPowers(vec_GF2E& x, const GF2EX& a, long k, 
                   const GF2EXArgument& H, const GF2EXModulus& F)
{
   if (k < 0 || NTL_OVERFLOW(k, 1, 0) || deg(a) >= F.n) 
      Error("ProjectPowers: bad args");

   long m = H.H.length()-1;
   long l = (k+m-1)/m - 1;

   GF2EXTransMultiplier M;
   build(M, H.H[m], F);

   GF2EX s;
   s = a;

   x.SetLength(k);

   long i;

   for (i = 0; i <= l; i++) {
      long m1 = min(m, k-i*m);
      for (long j = 0; j < m1; j++)
         InnerProduct(x[i*m+j], H.H[j].rep, s.rep);
      if (i < l)
         TransMulMod(s, s, M, F);
   }
}

static
void ProjectPowers(vec_GF2E& x, const GF2EX& a, long k, const GF2EX& h, 
                   const GF2EXModulus& F)
{
   if (k < 0 || deg(a) >= F.n || deg(h) >= F.n)
      Error("ProjectPowers: bad args");

   if (k == 0) {
      x.SetLength(0);;
      return;
   }

   long m = SqrRoot(k);

   GF2EXArgument H;
   build(H, h, F, m);

   ProjectPowers(x, a, k, H, F);
}

void ProjectPowers(vec_GF2E& x, const vec_GF2E& a, long k,
                   const GF2EXArgument& H, const GF2EXModulus& F)
{
   ProjectPowers(x, to_GF2EX(a), k, H, F);
}

void ProjectPowers(vec_GF2E& x, const vec_GF2E& a, long k, 
                   const GF2EX& h, const GF2EXModulus& F)
{
   ProjectPowers(x, to_GF2EX(a), k, h, F);
}




void BerlekampMassey(GF2EX& h, const vec_GF2E& a, long m)
{
   GF2EX Lambda, Sigma, Temp;
   long L;
   GF2E Delta, Delta1, t1;
   long shamt;
   GF2X tt1, tt2;

   // cerr << "*** " << m << "\n";

   Lambda.SetMaxLength(m+1);
   Sigma.SetMaxLength(m+1);
   Temp.SetMaxLength(m+1);

   L = 0;
   set(Lambda);
   clear(Sigma);
   set(Delta);
   shamt = 0;

   long i, r, dl;

   for (r = 1; r <= 2*m; r++) {
      // cerr << r << "--";
      clear(tt1);
      dl = deg(Lambda);
      for (i = 0; i <= dl; i++) {
         mul(tt2, rep(Lambda.rep[i]), rep(a[r-i-1]));
         add(tt1, tt1, tt2);
      }

      conv(Delta1, tt1);

      if (IsZero(Delta1)) {
         shamt++;
         // cerr << "case 1: " << deg(Lambda) << " " << deg(Sigma) << " " << shamt << "\n";
      }
      else if (2*L < r) {
         div(t1, Delta1, Delta);
         mul(Temp, Sigma, t1);
         Sigma = Lambda;
         ShiftAdd(Lambda, Temp, shamt+1);
         shamt = 0;
         L = r-L;
         Delta = Delta1;
         // cerr << "case 2: " << deg(Lambda) << " " << deg(Sigma) << " " << shamt << "\n";
      }
      else {
         shamt++;
         div(t1, Delta1, Delta);
         mul(Temp, Sigma, t1);
         ShiftAdd(Lambda, Temp, shamt);
         // cerr << "case 3: " << deg(Lambda) << " " << deg(Sigma) << " " << shamt << "\n";
      }
   }

   // cerr << "finished: " << L << " " << deg(Lambda) << "\n"; 

   dl = deg(Lambda);
   h.rep.SetLength(L + 1);

   for (i = 0; i < L - dl; i++)
      clear(h.rep[i]);

   for (i = L - dl; i <= L; i++)
      h.rep[i] = Lambda.rep[L - i];
}


void MinPolySeq(GF2EX& h, const vec_GF2E& a, long m)
{
   if (m < 0 || NTL_OVERFLOW(m, 1, 0)) Error("MinPoly: bad args");
   if (a.length() < 2*m) Error("MinPoly: sequence too short");

   BerlekampMassey(h, a, m);
}


void DoMinPolyMod(GF2EX& h, const GF2EX& g, const GF2EXModulus& F, long m, 
               const GF2EX& R)
{
   vec_GF2E x;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲第一电影网| 久久先锋资源网| 亚洲精品视频在线| av网站免费线看精品| 亚洲日本va在线观看| 在线一区二区视频| 日韩成人午夜电影| 精品日产卡一卡二卡麻豆| 国产麻豆9l精品三级站| 国产精品传媒入口麻豆| 在线视频一区二区三| 亚洲18女电影在线观看| 久久色视频免费观看| 成人爽a毛片一区二区免费| 综合久久久久久| 欧美一级黄色大片| 国产69精品久久99不卡| 亚洲精品乱码久久久久久久久| 欧洲精品中文字幕| 精品一区二区精品| 1区2区3区精品视频| 欧美日韩午夜在线视频| 国产伦精品一区二区三区免费迷| 国产精品网站在线观看| 欧美色倩网站大全免费| 精品一区二区三区欧美| 亚洲视频免费在线观看| 日韩欧美国产午夜精品| 92精品国产成人观看免费| 午夜久久久久久久久久一区二区| 精品国产人成亚洲区| 99re亚洲国产精品| 久久精品国产一区二区三 | 奇米影视在线99精品| 久久精品亚洲乱码伦伦中文| 色哟哟国产精品| 韩国成人在线视频| 亚洲高清免费观看| 国产精品无码永久免费888| 制服丝袜日韩国产| 99久久婷婷国产综合精品 | 亚洲免费在线视频一区 二区| 国产成人免费9x9x人网站视频| 亚洲人一二三区| 久久亚洲私人国产精品va媚药| 日本电影亚洲天堂一区| 国产成人自拍在线| 九九精品视频在线看| 亚洲二区在线观看| 国产精品国产成人国产三级| 欧美精品一区二区三区蜜桃| 欧美日产国产精品| 91小视频免费看| 国产aⅴ精品一区二区三区色成熟| 五月天亚洲精品| 亚洲自拍偷拍麻豆| 亚洲天堂网中文字| 国产精品入口麻豆原神| 国产调教视频一区| 欧美va亚洲va在线观看蝴蝶网| 欧美精品九九99久久| 在线观看成人小视频| av在线不卡观看免费观看| 成人免费毛片app| 国产大片一区二区| 岛国精品在线观看| 国产成人av资源| 国产精品亚洲第一区在线暖暖韩国| 男人操女人的视频在线观看欧美| 亚洲一区成人在线| 亚洲一区二区精品视频| 亚洲美女区一区| 一区二区三区中文字幕| 伊人开心综合网| 一级精品视频在线观看宜春院| 亚洲欧美另类图片小说| 亚洲欧美日韩在线播放| 一区二区三区免费在线观看| 国产精品成人免费在线| 国产精品午夜久久| 成人免费在线视频观看| 亚洲欧美二区三区| 亚洲色图在线看| 一区二区三区四区激情 | 亚洲一区视频在线| 一区二区三区四区在线| 亚洲va韩国va欧美va| 日韩精品五月天| 久国产精品韩国三级视频| 国产主播一区二区| 成人午夜在线免费| 色综合久久久久| 9191成人精品久久| 久久伊人蜜桃av一区二区| 国产无一区二区| 亚洲视频网在线直播| 亚洲国产va精品久久久不卡综合| 亚洲va天堂va国产va久| 久久99国内精品| a级高清视频欧美日韩| 色噜噜狠狠一区二区三区果冻| 欧美日韩一区三区| 日韩欧美国产精品一区| 日本一区二区在线不卡| 亚洲黄色片在线观看| 日韩高清一区二区| 国产精品自拍网站| 欧美性大战xxxxx久久久| 日韩一级高清毛片| 成人欧美一区二区三区视频网页| 亚洲国产另类精品专区| 欧美日本在线播放| 久久久久久99久久久精品网站| 亚洲色图色小说| 免费在线观看成人| hitomi一区二区三区精品| 欧美绝品在线观看成人午夜影视| 久久在线免费观看| 亚洲综合在线视频| 久久se精品一区精品二区| 97久久超碰精品国产| 欧美一级日韩免费不卡| 综合激情成人伊人| 久久99精品国产.久久久久| 北条麻妃一区二区三区| 日韩亚洲欧美在线观看| 日韩理论电影院| 国产一区二区视频在线| 欧美日韩国产高清一区二区三区 | 国产日产欧美一区| 午夜精品久久一牛影视| 成人免费视频播放| 日韩精品专区在线| 一区二区三区美女| 丁香桃色午夜亚洲一区二区三区 | 久久综合九色欧美综合狠狠| 亚洲激情图片小说视频| 国产福利91精品| 欧美成人艳星乳罩| 午夜精品成人在线视频| 色狠狠av一区二区三区| 国产精品视频九色porn| 国产一区在线精品| 日韩视频免费观看高清完整版在线观看| 国产精品久久久久久久久快鸭| 极品美女销魂一区二区三区免费| 欧美日韩精品一二三区| 亚洲精品中文在线| 成人性色生活片| 久久亚洲欧美国产精品乐播| 免费在线视频一区| 欧美欧美欧美欧美首页| 伊人色综合久久天天人手人婷| 成人动漫一区二区在线| 2024国产精品视频| 国内精品伊人久久久久影院对白| 欧美一区二区高清| 日韩中文字幕区一区有砖一区| 色悠悠久久综合| 亚洲欧美日韩系列| 色婷婷综合久色| 一区二区三区精品在线| 色婷婷综合五月| 亚洲一区二区视频| 欧美视频一区二区在线观看| 伊人性伊人情综合网| 欧美午夜精品一区二区蜜桃| 成人免费一区二区三区在线观看| 不卡av免费在线观看| 国产精品久久久久9999吃药| 成人爱爱电影网址| 亚洲欧美自拍偷拍色图| 一本久久a久久免费精品不卡| 亚洲精品亚洲人成人网| 在线视频欧美区| 香蕉久久一区二区不卡无毒影院| 欧美人伦禁忌dvd放荡欲情| 日日摸夜夜添夜夜添精品视频| 日韩欧美视频一区| 国产主播一区二区三区| 久久久不卡网国产精品二区| 国产东北露脸精品视频| 国产精品久久久久天堂| 色吧成人激情小说| 亚洲成人av在线电影| 91精品国产综合久久精品麻豆| 日韩精品电影在线| 久久久久久久久伊人| 9i在线看片成人免费| 亚洲综合丝袜美腿| 日韩一区二区三区视频在线| 国产精品亚洲人在线观看| 国产精品久久久久久福利一牛影视| 99久久99久久免费精品蜜臀| 亚洲综合激情另类小说区| 日韩区在线观看| 91色.com| 六月丁香综合在线视频| 国产精品久久久久一区二区三区 | 亚洲大片精品永久免费|