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

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

?? gf2exfactoring.c

?? 密碼大家Shoup寫的數論算法c語言實現
?? C
?? 第 1 頁 / 共 3 頁
字號:
#include <NTL/GF2EXFactoring.h>#include <NTL/vec_GF2XVec.h>#include <NTL/fileio.h>#include <NTL/FacVec.h>#include <stdio.h>#include <NTL/new.h>NTL_START_IMPLstaticvoid IterSqr(GF2E& c, const GF2E& a, long n){   GF2E res;   long i;   res = a;   for (i = 0; i < n; i++)      sqr(res, res);   c = res;}   void SquareFreeDecomp(vec_pair_GF2EX_long& u, const GF2EX& ff){   GF2EX f = ff;   if (!IsOne(LeadCoeff(f)))      Error("SquareFreeDecomp: bad args");   GF2EX r, t, v, tmp1;   long m, j, finished, done;   u.SetLength(0);   if (deg(f) == 0)      return;   m = 1;   finished = 0;   do {      j = 1;      diff(tmp1, f);      GCD(r, f, tmp1);      div(t, f, r);      if (deg(t) > 0) {         done = 0;         do {            GCD(v, r, t);            div(tmp1, t, v);            if (deg(tmp1) > 0) append(u, cons(tmp1, j*m));            if (deg(v) > 0) {               div(r, r, v);               t = v;               j++;            }            else               done = 1;         } while (!done);         if (deg(r) == 0) finished = 1;      }      if (!finished) {         /* r is a square */         long k, d;         d = deg(r)/2;         f.rep.SetLength(d+1);         for (k = 0; k <= d; k++)             IterSqr(f.rep[k], r.rep[k*2], GF2E::degree()-1);         m = m*2;      }   } while (!finished);}         staticvoid NullSpace(long& r, vec_long& D, vec_GF2XVec& M, long verbose){   long k, l, n;   long i, j;   long pos;   GF2X t1, t2;   GF2X *x, *y;   const GF2XModulus& p = GF2E::modulus();   n = M.length();   D.SetLength(n);   for (j = 0; j < n; j++) D[j] = -1;   r = 0;   l = 0;   for (k = 0; k < n; k++) {      if (verbose && k % 10 == 0) cerr << "+";      pos = -1;      for (i = l; i < n; i++) {         rem(t1, M[i][k], p);         M[i][k] = t1;         if (pos == -1 && !IsZero(t1))            pos = i;      }      if (pos != -1) {         swap(M[pos], M[l]);         // make M[l, k] == -1 mod p, and make row l reduced         InvMod(t1, M[l][k], p);         for (j = k+1; j < n; j++) {            rem(t2, M[l][j], p);            MulMod(M[l][j], t2, t1, p);         }         for (i = l+1; i < n; i++) {            // M[i] = M[i] + M[l]*M[i,k]            t1 = M[i][k];   // this is already reduced            x = M[i].elts() + (k+1);            y = M[l].elts() + (k+1);            for (j = k+1; j < n; j++, x++, y++) {               // *x = *x + (*y)*t1               mul(t2, *y, t1);               add(*x, *x, t2);            }         }         D[k] = l;   // variable k is defined by row l         l++;      }      else {         r++;      }   }}staticvoid BuildMatrix(vec_GF2XVec& M, long n, const GF2EX& g, const GF2EXModulus& F,                 long verbose){   long i, j, m;   GF2EX h;   M.SetLength(n);   for (i = 0; i < n; i++)      M[i].SetSize(n, 2*GF2E::WordLength());   set(h);   for (j = 0; j < n; j++) {      if (verbose && j % 10 == 0) cerr << "+";      m = deg(h);      for (i = 0; i < n; i++) {         if (i <= m)            M[i][j] = rep(h.rep[i]);         else            clear(M[i][j]);      }      if (j < n-1)         MulMod(h, h, g, F);   }   for (i = 0; i < n; i++)      add(M[i][i], M[i][i], 1);}staticvoid TraceMap(GF2EX& h, const GF2EX& a, const GF2EXModulus& F)// one could consider making a version based on modular composition,// as in ComposeFrobeniusMap...{   GF2EX res, tmp;   res = a;   tmp = a;   long i;   for (i = 0; i < GF2E::degree()-1; i++) {      SqrMod(tmp, tmp, F);      add(res, res, tmp);   }   h = res;}void PlainFrobeniusMap(GF2EX& h, const GF2EXModulus& F){   GF2EX res;   SetX(res);   long i;   for (i = 0; i < GF2E::degree(); i++)       SqrMod(res, res, F);   h = res;}long UseComposeFrobenius(long d, long n){   long i;   i = 1;   while (i <= d) i = i << 1;   i = i >> 1;   i = i >> 1;   long m = 1;   long dz;   if (n == 2) {      dz = 1;   }   else {      while (i) {         long m1 = 2*m;         if (i & d) m1++;            if (m1 >= NTL_BITS_PER_LONG-1 || (1L << m1) >= n) break;            m = m1;         i = i >> 1;      }      dz = 1L << m;   }   long rootn = SqrRoot(n);   long cnt = 0;   if (i) {      cnt += SqrRoot(dz+1);      i = i >> 1;   }   while (i) {      cnt += rootn;      i = i >> 1;   }   return 4*cnt <= d;}void ComposeFrobeniusMap(GF2EX& y, const GF2EXModulus& F){   long d = GF2E::degree();   long n = deg(F);   long i;   i = 1;   while (i <= d) i = i << 1;   i = i >> 1;   GF2EX z(INIT_SIZE, n), z1(INIT_SIZE, n);   i = i >> 1;   long m = 1;   if (n == 2) {      SetX(z);      SqrMod(z, z, F);   }   else {      while (i) {         long m1 = 2*m;         if (i & d) m1++;            if (m1 >= NTL_BITS_PER_LONG-1 || (1L << m1) >= n) break;            m = m1;         i = i >> 1;      }      clear(z);      SetCoeff(z, 1L << m);   }   while (i) {      z1 = z;      long j, k, dz;      dz = deg(z);      for (j = 0; j <= dz; j++)         for (k = 0; k < m; k++)            sqr(z1.rep[j], z1.rep[j]);      CompMod(z, z1, z, F);      m = 2*m;      if (d & i) {         SqrMod(z, z, F);         m++;      }      i = i >> 1;   }   y = z;}void FrobeniusMap(GF2EX& h, const GF2EXModulus& F){   long n = deg(F);   long d = GF2E::degree();   if (n == 1) {      h = ConstTerm(F);      return;   }   if (UseComposeFrobenius(d, n))      ComposeFrobeniusMap(h, F);   else      PlainFrobeniusMap(h, F);}   staticvoid RecFindRoots(vec_GF2E& x, const GF2EX& f){   if (deg(f) == 0) return;   if (deg(f) == 1) {      long k = x.length();      x.SetLength(k+1);      x[k] = ConstTerm(f);      return;   }         GF2EX h;   GF2E r;      {      GF2EXModulus F;      build(F, f);      do {         random(r);         clear(h);         SetCoeff(h, 1, r);         TraceMap(h, h, F);         GCD(h, h, f);      } while (deg(h) <= 0 || deg(h) == deg(f));   }   RecFindRoots(x, h);   div(h, f, h);    RecFindRoots(x, h);}void FindRoots(vec_GF2E& x, const GF2EX& ff){   GF2EX f = ff;   if (!IsOne(LeadCoeff(f)))      Error("FindRoots: bad args");   x.SetMaxLength(deg(f));   x.SetLength(0);   RecFindRoots(x, f);}staticvoid RandomBasisElt(GF2EX& g, const vec_long& D, const vec_GF2XVec& M){   static GF2X t1, t2;   long n = D.length();   long i, j, s;   g.rep.SetLength(n);   vec_GF2E& v = g.rep;   for (j = n-1; j >= 0; j--) {      if (D[j] == -1)         random(v[j]);      else {         i = D[j];         // v[j] = sum_{s=j+1}^{n-1} v[s]*M[i,s]         clear(t1);         for (s = j+1; s < n; s++) {            mul(t2, rep(v[s]), M[i][s]);            add(t1, t1, t2);         }         conv(v[j], t1);      }   }}staticvoid split(GF2EX& f1, GF2EX& g1, GF2EX& f2, GF2EX& g2,           const GF2EX& f, const GF2EX& g,            const vec_GF2E& roots, long lo, long mid){   long r = mid-lo+1;   GF2EXModulus F;   build(F, f);   vec_GF2E lroots(INIT_SIZE, r);   long i;   for (i = 0; i < r; i++)      lroots[i] = roots[lo+i];   GF2EX h, a, d;   BuildFromRoots(h, lroots);   CompMod(a, h, g, F);   GCD(f1, a, f);      div(f2, f, f1);   rem(g1, g, f1);   rem(g2, g, f2);}staticvoid RecFindFactors(vec_GF2EX& factors, const GF2EX& f, const GF2EX& g,                    const vec_GF2E& roots, long lo, long hi){   long r = hi-lo+1;   if (r == 0) return;   if (r == 1) {      append(factors, f);      return;   }   GF2EX f1, g1, f2, g2;   long mid = (lo+hi)/2;   split(f1, g1, f2, g2, f, g, roots, lo, mid);   RecFindFactors(factors, f1, g1, roots, lo, mid);   RecFindFactors(factors, f2, g2, roots, mid+1, hi);}staticvoid FindFactors(vec_GF2EX& factors, const GF2EX& f, const GF2EX& g,                 const vec_GF2E& roots){   long r = roots.length();   factors.SetMaxLength(r);   factors.SetLength(0);   RecFindFactors(factors, f, g, roots, 0, r-1);}#if 0staticvoid IterFindFactors(vec_GF2EX& factors, const GF2EX& f,                     const GF2EX& g, const vec_GF2E& roots){   long r = roots.length();   long i;   GF2EX h;   factors.SetLength(r);   for (i = 0; i < r; i++) {      add(h, g, roots[i]);      GCD(factors[i], f, h);   }}#endif   void SFBerlekamp(vec_GF2EX& factors, const GF2EX& ff, long verbose){   GF2EX f = ff;   if (!IsOne(LeadCoeff(f)))      Error("SFBerlekamp: bad args");   if (deg(f) == 0) {      factors.SetLength(0);      return;   }   if (deg(f) == 1) {      factors.SetLength(1);      factors[0] = f;      return;   }   double t;   long n = deg(f);   GF2EXModulus F;   build(F, f);   GF2EX g, h;   if (verbose) { cerr << "computing X^p..."; t = GetTime(); }   FrobeniusMap(g, F);   if (verbose) { cerr << (GetTime()-t) << "\n"; }   vec_long D;   long r;   vec_GF2XVec M;   if (verbose) { cerr << "building matrix..."; t = GetTime(); }   BuildMatrix(M, n, g, F, verbose);   if (verbose) { cerr << (GetTime()-t) << "\n"; }   if (verbose) { cerr << "diagonalizing..."; t = GetTime(); }   NullSpace(r, D, M, verbose);   if (verbose) { cerr << (GetTime()-t) << "\n"; }   if (verbose) cerr << "number of factors = " << r << "\n";   if (r == 1) {      factors.SetLength(1);      factors[0] = f;      return;   }   if (verbose) { cerr << "factor extraction..."; t = GetTime(); }   vec_GF2E roots;   RandomBasisElt(g, D, M);   MinPolyMod(h, g, F, r);   if (deg(h) == r) M.kill();   FindRoots(roots, h);   FindFactors(factors, f, g, roots);   GF2EX g1;   vec_GF2EX S, S1;   long i;   while (factors.length() < r) {      if (verbose) cerr << "+";      RandomBasisElt(g, D, M);      S.kill();      for (i = 0; i < factors.length(); i++) {         const GF2EX& f = factors[i];         if (deg(f) == 1) {            append(S, f);            continue;         }         build(F, f);         rem(g1, g, F);         if (deg(g1) <= 0) {            append(S, f);            continue;         }         MinPolyMod(h, g1, F, min(deg(f), r-factors.length()+1));         FindRoots(roots, h);         S1.kill();         FindFactors(S1, f, g1, roots);         append(S, S1);      }      swap(factors, S);   }   if (verbose) { cerr << (GetTime()-t) << "\n"; }   if (verbose) {      cerr << "degrees:";      long i;      for (i = 0; i < factors.length(); i++)         cerr << " " << deg(factors[i]);      cerr << "\n";   }}void berlekamp(vec_pair_GF2EX_long& factors, const GF2EX& f, long verbose){   double t;   vec_pair_GF2EX_long sfd;   vec_GF2EX x;   if (!IsOne(LeadCoeff(f)))      Error("berlekamp: bad args");      if (verbose) { cerr << "square-free decomposition..."; t = GetTime(); }   SquareFreeDecomp(sfd, f);   if (verbose) cerr << (GetTime()-t) << "\n";   factors.SetLength(0);   long i, j;   for (i = 0; i < sfd.length(); i++) {      if (verbose) {         cerr << "factoring multiplicity " << sfd[i].b               << ", deg = " << deg(sfd[i].a) << "\n";      }      SFBerlekamp(x, sfd[i].a, verbose);      for (j = 0; j < x.length(); j++)         append(factors, cons(x[j], sfd[i].b));   }}staticvoid AddFactor(vec_pair_GF2EX_long& factors, const GF2EX& g, long d, long verbose){   if (verbose)      cerr << "degree=" << d << ", number=" << deg(g)/d << "\n";   append(factors, cons(g, d));}staticvoid ProcessTable(GF2EX& f, vec_pair_GF2EX_long& factors,                   const GF2EXModulus& F, long limit, const vec_GF2EX& tbl,                  long d, long verbose){   if (limit == 0) return;   if (verbose) cerr << "+";   GF2EX t1;   if (limit == 1) {      GCD(t1, f, tbl[0]);      if (deg(t1) > 0) {         AddFactor(factors, t1, d, verbose);         div(f, f, t1);      }      return;   }   long i;   t1 = tbl[0];   for (i = 1; i < limit; i++)      MulMod(t1, t1, tbl[i], F);   GCD(t1, f, t1);   if (deg(t1) == 0) return;   div(f, f, t1);   GF2EX t2;   i = 0;   d = d - limit + 1;   while (2*d <= deg(t1)) {      GCD(t2, tbl[i], t1);       if (deg(t2) > 0) {         AddFactor(factors, t2, d, verbose);         div(t1, t1, t2);      }      i++;      d++;   }   if (deg(t1) > 0)      AddFactor(factors, t1, deg(t1), verbose);}void TraceMap(GF2EX& w, const GF2EX& a, long d, const GF2EXModulus& F,               const GF2EX& b){   if (d < 0) Error("TraceMap: bad args");

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
天天色图综合网| 欧美色国产精品| 欧美色中文字幕| 精品捆绑美女sm三区| 国产精品福利影院| 国产一区欧美日韩| 欧美一区二区三区视频免费 | 国产精品中文字幕欧美| 欧美视频中文字幕| 亚洲精品精品亚洲| 成人国产精品免费网站| 久久综合九色综合久久久精品综合| 一卡二卡三卡日韩欧美| 波多野洁衣一区| 国产视频不卡一区| 国产老肥熟一区二区三区| 欧美精品一卡二卡| 亚洲大片在线观看| 欧亚一区二区三区| 一区二区三区中文字幕精品精品 | 美洲天堂一区二卡三卡四卡视频 | 欧美视频一区二区三区在线观看| 亚洲国产成人一区二区三区| 久久69国产一区二区蜜臀| 8x8x8国产精品| 日韩和欧美的一区| 欧美午夜精品久久久| 亚洲激情欧美激情| 一本大道av伊人久久综合| 亚洲天堂福利av| 色天使久久综合网天天| 亚洲三级免费观看| 一本大道久久a久久综合婷婷| 亚洲欧美一区二区三区国产精品| 99久久伊人网影院| 亚洲欧美日韩国产另类专区 | 亚洲乱码中文字幕| 色88888久久久久久影院野外| 亚洲精品国产精品乱码不99| 91久久精品网| 天天色综合天天| 欧美成人精品3d动漫h| 久久国产精品区| 久久精品日产第一区二区三区高清版 | 成人深夜在线观看| 自拍偷拍国产精品| 欧美亚洲综合另类| 免费成人结看片| 精品国产乱码久久久久久影片| 久久99久久99精品免视看婷婷| 精品久久久久久久一区二区蜜臀| 国产毛片一区二区| 日韩理论片网站| 欧美色欧美亚洲另类二区| 人人狠狠综合久久亚洲| 国产午夜亚洲精品不卡| 色综合久久综合网欧美综合网| 亚洲一级二级在线| 欧美精品一区二区三区蜜桃 | 激情国产一区二区| 国产精品久久三| 欧美日韩一区在线| 国产美女视频91| 亚洲永久免费视频| xvideos.蜜桃一区二区| 99国产一区二区三精品乱码| 亚洲一区在线视频观看| 久久夜色精品国产噜噜av| 99久久婷婷国产综合精品电影| 五月婷婷久久综合| 国产日韩欧美在线一区| 欧美日韩国产另类不卡| 国产精品1区2区| 午夜成人免费电影| 中文字幕一区二区三中文字幕| 717成人午夜免费福利电影| 国产91精品精华液一区二区三区| 亚洲国产另类av| 国产婷婷精品av在线| 欧美日韩日日摸| 99re8在线精品视频免费播放| 麻豆精品久久精品色综合| 亚洲色图制服诱惑| 欧美激情一区二区三区在线| 欧美日韩国产在线观看| 91一区二区在线| 国产盗摄视频一区二区三区| 日韩高清不卡一区二区| 一区二区三区四区中文字幕| 久久久久99精品一区| 欧美高清你懂得| 日本高清不卡视频| 成人av在线资源网站| 美女一区二区久久| 无吗不卡中文字幕| 一二三区精品福利视频| 欧美国产丝袜视频| 久久奇米777| 欧美mv日韩mv国产网站app| 精品视频在线看| 日本精品视频一区二区| 91麻豆视频网站| av在线不卡免费看| 成人美女在线视频| 国产精品91xxx| 国产精品一区二区91| 国产一区不卡在线| 国内精品免费在线观看| 日韩电影在线观看网站| 日本亚洲欧美天堂免费| 日韩中文字幕区一区有砖一区| 亚洲高清不卡在线| 婷婷综合久久一区二区三区| 亚洲国产人成综合网站| 亚洲综合激情另类小说区| 一区二区三区欧美久久| 亚洲自拍偷拍综合| 亚洲va韩国va欧美va精品| 午夜国产精品一区| 日本午夜一区二区| 精品一区二区三区视频在线观看 | 日韩精品一卡二卡三卡四卡无卡| 亚洲午夜免费视频| 日欧美一区二区| 国产综合久久久久影院| 国产九色sp调教91| 99久久99久久免费精品蜜臀| 91小宝寻花一区二区三区| 在线国产电影不卡| 7777精品伊人久久久大香线蕉超级流畅| 欧美日韩二区三区| 精品国产自在久精品国产| 久久精品视频一区| 亚洲色图清纯唯美| 亚洲国产精品综合小说图片区| 香蕉成人啪国产精品视频综合网| 日韩成人精品视频| 国产精品一二三区| 91国在线观看| 精品少妇一区二区三区日产乱码| 国产精品午夜在线观看| 樱花草国产18久久久久| 青青草97国产精品免费观看| 国产福利一区在线观看| 欧美私模裸体表演在线观看| 日韩精品一区二| 亚洲欧洲制服丝袜| 麻豆精品精品国产自在97香蕉 | 国产精品久久久久久久裸模| 亚洲精品日产精品乱码不卡| 丝袜国产日韩另类美女| 国产福利精品一区二区| 欧美网站一区二区| 久久久久久久久久美女| 亚洲一区二区在线视频| 国产精品亚洲第一区在线暖暖韩国 | 一二三区精品福利视频| 国产一区二区在线影院| 色吧成人激情小说| 久久九九全国免费| 日韩精品91亚洲二区在线观看| 国产精品2024| 91精品国产丝袜白色高跟鞋| 中文字幕一区二区三区视频 | xnxx国产精品| 亚洲成人动漫在线观看| 成人午夜大片免费观看| 制服丝袜中文字幕亚洲| 国产精品久久久久久户外露出| 日本欧美肥老太交大片| 色先锋aa成人| 日本一区二区高清| 久久精品国产一区二区三区免费看| 99视频精品在线| 国产人成亚洲第一网站在线播放| 日本欧美一区二区三区| 欧美午夜宅男影院| 亚洲欧美成人一区二区三区| 国产成人夜色高潮福利影视| 日韩亚洲欧美在线观看| 亚洲国产精品久久艾草纯爱| 91小视频免费看| 国产精品电影一区二区| 成人午夜看片网址| 日本一区二区视频在线| 免费日本视频一区| 欧美老年两性高潮| 亚洲一区二三区| 欧美性受xxxx黑人xyx| 亚洲精品日产精品乱码不卡| av电影一区二区| 国产精品传媒视频| jizzjizzjizz欧美| 国产精品久久久久久久久免费桃花 | 亚洲色大成网站www久久九九| 成人性生交大片免费| 亚洲国产高清在线观看视频| 国产成人av电影在线播放| 国产视频不卡一区| 成人性色生活片|