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

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

?? mat_gf2.c

?? 密碼大家Shoup寫的數論算法c語言實現
?? C
字號:
#include <NTL/mat_GF2.h>#include <NTL/vec_long.h>#include <NTL/new.h>NTL_START_IMPLmat_GF2::mat_GF2(const mat_GF2& a)  {     _mat_GF2__numcols = 0;     SetDims(a.NumRows(), a.NumCols());     _mat_GF2__rep = a._mat_GF2__rep;  }    mat_GF2& mat_GF2::operator=(const mat_GF2& a)  {     SetDims(a.NumRows(), a.NumCols());     _mat_GF2__rep = a._mat_GF2__rep;     return *this;}      mat_GF2::mat_GF2(INIT_SIZE_TYPE, long n, long m)  {     _mat_GF2__numcols = 0;     SetDims(n, m);  }    void mat_GF2::kill()  {     _mat_GF2__numcols = 0;     _mat_GF2__rep.kill();  }    void mat_GF2::SetDims(long n, long m)  {     if (n < 0 || m < 0)        Error("SetDims: bad args");       if (m != _mat_GF2__numcols) {        _mat_GF2__rep.kill();        _mat_GF2__numcols = m;     }             long oldmax = _mat_GF2__rep.MaxLength();     long i;     _mat_GF2__rep.SetLength(n);       for (i = oldmax; i < n; i++)        _mat_GF2__rep[i].FixLength(m);  }               void conv(mat_GF2& x, const vec_vec_GF2& a)  {     long n = a.length();       if (n == 0) {        x.SetDims(0, 0);        return;     }       long m = a[0].length();     long i;       for (i = 1; i < n; i++)        if (a[i].length() != m)           Error("nonrectangular matrix");       x.SetDims(n, m);     for (i = 0; i < n; i++)        x[i] = a[i];  }    void swap(mat_GF2& X, mat_GF2& Y)  {     swap(X._mat_GF2__numcols, Y._mat_GF2__numcols);     swap(X._mat_GF2__rep, Y._mat_GF2__rep);  }    long operator==(const mat_GF2& a, const mat_GF2& b)  {     if (a.NumCols() != b.NumCols())        return 0;       if (a.NumRows() != b.NumRows())        return 0;       long n = a.NumRows();     long i;       for (i = 0; i < n; i++)        if (a[i] != b[i])           return 0;       return 1;  }      long operator!=(const mat_GF2& a, const mat_GF2& b)  {     return !(a == b);  }  istream& operator>>(istream& s, mat_GF2& x)  {     vec_vec_GF2 buf;     s >> buf;     conv(x, buf);     return s;  }    ostream& operator<<(ostream& s, const mat_GF2& a)  {     long n = a.NumRows();     long i;     s << "[";     for (i = 0; i < n; i++) {      s << a[i];        s << "\n";   }   s << "]";     return s;  }  void add(mat_GF2& X, const mat_GF2& A, const mat_GF2& B)  {     long n = A.NumRows();     long m = A.NumCols();       if (B.NumRows() != n || B.NumCols() != m)         Error("matrix add: dimension mismatch");       X.SetDims(n, m);     long mw = (m + NTL_BITS_PER_LONG - 1)/NTL_BITS_PER_LONG;     long i;     for (i = 0; i < n; i++) {      _ntl_ulong *xp = X[i].rep.elts();      const _ntl_ulong *ap = A[i].rep.elts();      const _ntl_ulong *bp = B[i].rep.elts();      long j;      for (j = 0; j < mw; j++)         xp[j] = ap[j] ^ bp[j];   }}    staticvoid mul_aux(vec_GF2& x, const mat_GF2& A, const vec_GF2& b)  {     long n = A.NumRows();     long l = A.NumCols();       if (l != b.length())        Error("matrix mul: dimension mismatch");       x.SetLength(n);       long i;       for (i = 0; i < n; i++) {        x.put(i, A[i] * b);   }  }      void mul(vec_GF2& x, const mat_GF2& A, const vec_GF2& b)  {     if (&b == &x || A.position(b) != -1) {      vec_GF2 tmp;      mul_aux(tmp, A, b);      x = tmp;   }   else      mul_aux(x, A, b);}  staticvoid mul_aux(vec_GF2& x, const vec_GF2& a, const mat_GF2& B)  {     long n = B.NumRows();     long l = B.NumCols();       if (n != a.length())        Error("matrix mul: dimension mismatch");       x.SetLength(l);     clear(x);   const _ntl_ulong *ap = a.rep.elts();   _ntl_ulong a_mask = 1;   _ntl_ulong *xp = x.rep.elts();   long lw = (l + NTL_BITS_PER_LONG - 1)/NTL_BITS_PER_LONG;     long i;     for (i = 0; i < n; i++) {        if (*ap & a_mask) {         const _ntl_ulong *bp = B[i].rep.elts();         long j;         for (j = 0; j < lw; j++)            xp[j] ^= bp[j];      }      a_mask <<= 1;      if (!a_mask) {         a_mask = 1;         ap++;      }   }  }  void mul(vec_GF2& x, const vec_GF2& a, const mat_GF2& B){   if (&a == &x || B.position(a) != -1) {      vec_GF2 tmp;      mul_aux(tmp, a, B);      x = tmp;   }   else      mul_aux(x, a, B);}  void mul_aux(mat_GF2& X, const mat_GF2& A, const mat_GF2& B)  {     long n = A.NumRows();     long l = A.NumCols();     long m = B.NumCols();       if (l != B.NumRows())        Error("matrix mul: dimension mismatch");       X.SetDims(n, m);       long i;       for (i = 1; i <= n; i++) {        mul_aux(X(i), A(i), B);   }  }      void mul(mat_GF2& X, const mat_GF2& A, const mat_GF2& B)  {     if (&X == &A || &X == &B) {        mat_GF2 tmp;        mul_aux(tmp, A, B);        X = tmp;     }     else        mul_aux(X, A, B);  }           void ident(mat_GF2& X, long n)  {     X.SetDims(n, n);     clear(X);   long i;       for (i = 0; i < n; i++)        X.put(i, i, to_GF2(1));} void det(GF2& d, const mat_GF2& M_in){   long k, n;   long i, j;   long pos;   n = M_in.NumRows();   if (M_in.NumCols() != n)      Error("determinant: nonsquare matrix");   if (n == 0) {      set(d);      return;   }   mat_GF2 M;   M = M_in;   long wn = (n + NTL_BITS_PER_LONG - 1)/NTL_BITS_PER_LONG;   for (k = 0; k < n; k++) {      long wk = k/NTL_BITS_PER_LONG;      long bk = k - wk*NTL_BITS_PER_LONG;      _ntl_ulong k_mask = 1UL << bk;      pos = -1;      for (i = k; i < n; i++) {         if (M[i].rep.elts()[wk] & k_mask) {            pos = i;            break;         }      }      if (pos != -1) {         if (k != pos) {            swap(M[pos], M[k]);         }         _ntl_ulong *y = M[k].rep.elts();         for (i = k+1; i < n; i++) {            // M[i] = M[i] + M[k]*M[i,k]            if (M[i].rep.elts()[wk] & k_mask) {               _ntl_ulong *x = M[i].rep.elts();               for (j = wk; j < wn; j++)                  x[j] ^= y[j];            }         }      }      else {         clear(d);         return;      }   }   set(d);   return;}staticlong IsUnitVector(const vec_GF2& a, long i){   long wi = i/NTL_BITS_PER_LONG;   long bi = i - wi*NTL_BITS_PER_LONG;   const _ntl_ulong *p = a.rep.elts();   long wdlen = a.rep.length();   long j;   for (j = 0; j < wi; j++)      if (p[j] != 0) return 0;   if (p[wi] != (1UL << bi))      return 0;   for (j = wi+1; j < wdlen; j++)      if (p[j] != 0) return 0;   return 1;}long IsIdent(const mat_GF2& A, long n){   if (A.NumRows() != n || A.NumCols() != n)      return 0;   if (n == 0) return 1;   long i;   for (i = 0; i < n; i++)      if (!IsUnitVector(A[i], i))         return 0;   return 1;}void AddToCol(mat_GF2& x, long j, const vec_GF2& a)// add a to column j of x// ALIAS RESTRICTION: a should not alias any row of x{   long n = x.NumRows();   long m = x.NumCols();   if (a.length() != n || j < 0 || j >= m)      Error("AddToCol: bad args");   long wj = j/NTL_BITS_PER_LONG;   long bj = j - wj*NTL_BITS_PER_LONG;   _ntl_ulong j_mask = 1UL << bj;   const _ntl_ulong *ap = a.rep.elts();   _ntl_ulong a_mask = 1;   long i;   for (i = 0; i < n; i++) {      if (*ap & a_mask)          x[i].rep.elts()[wj] ^= j_mask;      a_mask <<= 1;      if (!a_mask) {         a_mask = 1;         ap++;      }   }}void transpose_aux(mat_GF2& X, const mat_GF2& A){   long n = A.NumRows();   long m = A.NumCols();   X.SetDims(m, n);   clear(X);   long i;   for (i = 0; i < n; i++)      AddToCol(X, i, A[i]);}            void transpose(mat_GF2& X, const mat_GF2& A){   if (&X == &A) {      mat_GF2 tmp;      transpose_aux(tmp, A);      X = tmp;   }   else      transpose_aux(X, A);}   void solve(GF2& d, vec_GF2& X, const mat_GF2& A, const vec_GF2& b){   long n = A.NumRows();   if (A.NumCols() != n)      Error("solve: nonsquare matrix");   if (b.length() != n)      Error("solve: dimension mismatch");   if (n == 0) {      X.SetLength(0);      set(d);      return;   }   long i, j, k, pos;   mat_GF2 M;   M.SetDims(n, n+1);   for (i = 0; i < n; i++) {      AddToCol(M, i, A[i]);   }   AddToCol(M, n, b);   long wn = ((n+1) + NTL_BITS_PER_LONG - 1)/NTL_BITS_PER_LONG;   for (k = 0; k < n; k++) {      long wk = k/NTL_BITS_PER_LONG;      long bk = k - wk*NTL_BITS_PER_LONG;      _ntl_ulong k_mask = 1UL << bk;      pos = -1;      for (i = k; i < n; i++) {         if (M[i].rep.elts()[wk] & k_mask) {            pos = i;            break;         }      }      if (pos != -1) {         if (k != pos) {            swap(M[pos], M[k]);         }         _ntl_ulong *y = M[k].rep.elts();         for (i = k+1; i < n; i++) {            // M[i] = M[i] + M[k]*M[i,k]            if (M[i].rep.elts()[wk] & k_mask) {               _ntl_ulong *x = M[i].rep.elts();               for (j = wk; j < wn; j++)                  x[j] ^= y[j];            }         }      }      else {         clear(d);         return;      }   }   vec_GF2 XX;   XX.SetLength(n+1);   XX.put(n, 1);   for (i = n-1; i >= 0; i--) {      XX.put(i, XX*M[i]);   }   XX.SetLength(n);   X = XX;   set(d);   return;}void inv(GF2& d, mat_GF2& X, const mat_GF2& A){   long n = A.NumRows();   if (A.NumCols() != n)      Error("solve: nonsquare matrix");   if (n == 0) {      X.SetDims(0, 0);      set(d);   }   long i, j, k, pos;   mat_GF2 M;   M.SetDims(n, 2*n);   vec_GF2 aa;   aa.SetLength(2*n);   for (i = 0; i < n; i++) {      aa = A[i];      aa.SetLength(2*n);      aa.put(n+i, 1);      M[i] = aa;   }   long wn = ((2*n) + NTL_BITS_PER_LONG - 1)/NTL_BITS_PER_LONG;   for (k = 0; k < n; k++) {      long wk = k/NTL_BITS_PER_LONG;      long bk = k - wk*NTL_BITS_PER_LONG;      _ntl_ulong k_mask = 1UL << bk;      pos = -1;      for (i = k; i < n; i++) {         if (M[i].rep.elts()[wk] & k_mask) {            pos = i;            break;         }      }      if (pos != -1) {         if (k != pos) {            swap(M[pos], M[k]);         }         _ntl_ulong *y = M[k].rep.elts();         for (i = k+1; i < n; i++) {            // M[i] = M[i] + M[k]*M[i,k]            if (M[i].rep.elts()[wk] & k_mask) {               _ntl_ulong *x = M[i].rep.elts();               for (j = wk; j < wn; j++)                  x[j] ^= y[j];            }         }      }      else {         clear(d);         return;      }   }   vec_GF2 XX;   XX.SetLength(2*n);   X.SetDims(n, n);   clear(X);   for (j = 0; j < n; j++) {      XX.SetLength(n+j+1);      clear(XX);      XX.put(n+j, to_GF2(1));            for (i = n-1; i >= 0; i--) {         XX.put(i, XX*M[i]);      }         XX.SetLength(n);      AddToCol(X, j, XX);   }   set(d);   return;}long gauss(mat_GF2& M, long w){   long k, l;   long i, j;   long pos;   long n = M.NumRows();   long m = M.NumCols();   if (w < 0 || w > m)      Error("gauss: bad args");   long wm = (m + NTL_BITS_PER_LONG - 1)/NTL_BITS_PER_LONG;   l = 0;   for (k = 0; k < w && l < n; k++) {      long wk = k/NTL_BITS_PER_LONG;      long bk = k - wk*NTL_BITS_PER_LONG;      _ntl_ulong k_mask = 1UL << bk;      pos = -1;      for (i = l; i < n; i++) {         if (M[i].rep.elts()[wk] & k_mask) {            pos = i;            break;         }      }      if (pos != -1) {         if (l != pos)            swap(M[pos], M[l]);         _ntl_ulong *y = M[l].rep.elts();         for (i = l+1; i < n; i++) {            // M[i] = M[i] + M[l]*M[i,k]            if (M[i].rep.elts()[wk] & k_mask) {               _ntl_ulong *x = M[i].rep.elts();               for (j = wk; j < wm; j++)                  x[j] ^= y[j];            }         }         l++;      }   }      return l;}long gauss(mat_GF2& M){   return gauss(M, M.NumCols());}void image(mat_GF2& X, const mat_GF2& A){   mat_GF2 M;   M = A;   long r = gauss(M);   M.SetDims(r, M.NumCols());   X = M;}void kernel(mat_GF2& X, const mat_GF2& A){   long m = A.NumRows();   long n = A.NumCols();   mat_GF2 M;   long r;   transpose(M, A);   r = gauss(M);   X.SetDims(m-r, m);   clear(X);   long i, j, k;   vec_long D;   D.SetLength(m);   for (j = 0; j < m; j++) D[j] = -1;   j = -1;   for (i = 0; i < r; i++) {      do {         j++;      } while (M.get(i, j) == 0);       D[j] = i;   }   for (k = 0; k < m-r; k++) {      vec_GF2& v = X[k];      long pos = 0;      for (j = m-1; j >= 0; j--) {         if (D[j] == -1) {            if (pos == k) {               v[j] = 1;               // v.put(j, to_GF2(1));            }            pos++;         }         else {            v[j] = v*M[D[j]];            // v.put(j, v*M[D[j]]);         }      }   }}   void mul(mat_GF2& X, const mat_GF2& A, GF2 b){   X = A;   if (b == 0)      clear(X);}void diag(mat_GF2& X, long n, GF2 d)  {     if (d == 1)      ident(X, n);   else {      X.SetDims(n, n);      clear(X);   }} long IsDiag(const mat_GF2& A, long n, GF2 d){   if (A.NumRows() != n || A.NumCols() != n)      return 0;   if (d == 1)      return IsIdent(A, n);   else      return IsZero(A);}long IsZero(const mat_GF2& a){   long n = a.NumRows();   long i;   for (i = 0; i < n; i++)      if (!IsZero(a[i]))         return 0;   return 1;}void clear(mat_GF2& x){   long n = x.NumRows();   long i;   for (i = 0; i < n; i++)      clear(x[i]);}mat_GF2 operator+(const mat_GF2& a, const mat_GF2& b){   mat_GF2 res;   add(res, a, b);   NTL_OPT_RETURN(mat_GF2, res);}mat_GF2 operator*(const mat_GF2& a, const mat_GF2& b){   mat_GF2 res;   mul_aux(res, a, b);   NTL_OPT_RETURN(mat_GF2, res);}mat_GF2 operator-(const mat_GF2& a, const mat_GF2& b){   mat_GF2 res;   add(res, a, b);   NTL_OPT_RETURN(mat_GF2, res);}vec_GF2 operator*(const mat_GF2& a, const vec_GF2& b){   vec_GF2 res;   mul_aux(res, a, b);   NTL_OPT_RETURN(vec_GF2, res);}vec_GF2 operator*(const vec_GF2& a, const mat_GF2& b){   vec_GF2 res;   mul_aux(res, a, b);   NTL_OPT_RETURN(vec_GF2, res);}void inv(mat_GF2& X, const mat_GF2& A){   GF2 d;   inv(d, X, A);   if (d == 0) Error("inv: non-invertible matrix");}void power(mat_GF2& X, const mat_GF2& A, const ZZ& e){   if (A.NumRows() != A.NumCols()) Error("power: non-square matrix");   if (e == 0) {      ident(X, A.NumRows());      return;   }   mat_GF2 T1, T2;   long i, k;   k = NumBits(e);   T1 = A;   for (i = k-2; i >= 0; i--) {      sqr(T2, T1);      if (bit(e, i))         mul(T1, T2, A);      else         T1 = T2;   }   if (e < 0)      inv(X, T1);   else      X = T1;}NTL_END_IMPL

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜视频在线观看一区二区| 欧美私人免费视频| 色综合久久综合| 欧美丰满美乳xxx高潮www| 国产女人aaa级久久久级| 午夜av电影一区| 成人av免费在线播放| 日韩午夜在线观看| 亚洲欧美色一区| 国产成人精品亚洲午夜麻豆| 欧美日韩国产免费一区二区| 中文字幕在线不卡一区| 黄色小说综合网站| 欧美精品 日韩| 亚洲综合另类小说| 波多野结衣中文字幕一区 | 美女视频免费一区| 99精品视频一区二区三区| 精品少妇一区二区三区视频免付费 | 国产精品美女久久久久高潮| 蜜桃视频一区二区| 欧美性色aⅴ视频一区日韩精品| 久久精品亚洲精品国产欧美| 蜜桃一区二区三区在线| 69成人精品免费视频| 亚洲一区二区免费视频| 一本色道综合亚洲| 亚洲天堂精品视频| 不卡一区中文字幕| 国产日韩欧美制服另类| 国产精品亚洲专一区二区三区 | 国产精品水嫩水嫩| 国产精品99精品久久免费| 欧美xxxx在线观看| 美女网站在线免费欧美精品| 正在播放亚洲一区| 蜜桃精品视频在线| 精品久久久久一区二区国产| 久久精品国产亚洲aⅴ| 国产乱子伦视频一区二区三区| 男人的天堂久久精品| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 97aⅴ精品视频一二三区| 国产精品久久久久9999吃药| 成人激情动漫在线观看| 国产精品久久99| 99精品一区二区三区| 日韩一区中文字幕| 欧美视频一区二| 午夜视频在线观看一区二区三区| 欧美一区在线视频| 精品影视av免费| 国产精品麻豆一区二区| 在线观看国产日韩| 午夜不卡在线视频| 久久网站热最新地址| 成人av在线播放网址| 一区二区三区久久| 3d动漫精品啪啪1区2区免费| 狠狠色丁香九九婷婷综合五月| 久久综合九色综合久久久精品综合| 国产精品一二三四五| 亚洲乱码中文字幕| 91麻豆精品国产91久久久| 国产在线国偷精品产拍免费yy| 国产精品免费aⅴ片在线观看| 色综合天天狠狠| 青青草原综合久久大伊人精品优势| 国产欧美一区二区三区沐欲 | 欧美视频精品在线观看| 久久爱www久久做| 亚洲男帅同性gay1069| 精品欧美一区二区三区精品久久 | 欧洲精品一区二区| 久久成人免费网站| 一区二区三区四区在线免费观看| 欧美一区二区高清| 91蝌蚪porny九色| 蜜芽一区二区三区| 亚洲视频免费观看| 精品人伦一区二区色婷婷| 91色|porny| 精品一区二区三区在线观看| 亚洲午夜影视影院在线观看| 久久久久亚洲综合| 欧美精品久久久久久久多人混战| 国产成人无遮挡在线视频| 亚洲成人动漫在线免费观看| 中文字幕在线一区二区三区| 日韩欧美视频在线| 91福利视频久久久久| 国产aⅴ精品一区二区三区色成熟| 午夜精品久久久久久久99樱桃| 国产欧美日本一区二区三区| 在线成人av网站| 色94色欧美sute亚洲线路一久| 国产成人av电影免费在线观看| 日韩国产一二三区| 亚洲国产成人91porn| 中文字幕一区二区三| 久久久久久久久久久久电影| 欧美一区二区久久久| 欧美在线综合视频| 91丝袜美女网| 懂色中文一区二区在线播放| 国产精品亚洲а∨天堂免在线| 日韩精品久久理论片| 亚洲国产欧美一区二区三区丁香婷| 国产精品第五页| 中文字幕一区二区三区精华液 | 成人精品一区二区三区四区 | 91福利在线导航| 一本到高清视频免费精品| 成人自拍视频在线观看| 国产成人免费在线观看| 韩国理伦片一区二区三区在线播放| 毛片一区二区三区| 奇米精品一区二区三区在线观看| 日韩一区精品字幕| 日本aⅴ亚洲精品中文乱码| 人人精品人人爱| 精品一区二区免费看| 精品一区二区三区影院在线午夜| 久久国产夜色精品鲁鲁99| 久久成人精品无人区| 国产一区二区在线影院| 国产很黄免费观看久久| 国产成人综合自拍| 99久久久国产精品免费蜜臀| 91黄视频在线| 欧美精品aⅴ在线视频| 日韩欧美一二三| 国产欧美综合在线观看第十页| 国产精品久久久久久亚洲伦| 亚洲美女区一区| 污片在线观看一区二区| 麻豆91在线播放免费| 国产一区二区三区国产| 国产精品主播直播| 91啪九色porn原创视频在线观看| 色94色欧美sute亚洲13| 欧美一激情一区二区三区| 久久久亚洲午夜电影| 中文字幕一区二区不卡| 亚洲高清中文字幕| 久草热8精品视频在线观看| 丁香婷婷综合色啪| 欧美在线不卡一区| 日韩免费观看2025年上映的电影| 欧美激情一区二区三区不卡 | 日本精品免费观看高清观看| 欧美日韩视频在线第一区 | 国产91精品久久久久久久网曝门| 99麻豆久久久国产精品免费| 欧美日韩高清一区二区不卡| 欧美精品一区二| 亚洲国产成人av| 国产不卡免费视频| 欧美日韩精品一区二区三区蜜桃| 精品国产亚洲一区二区三区在线观看| 国产日产精品一区| 亚洲超丰满肉感bbw| 国产精品一区一区三区| 欧美日韩一区二区在线观看视频 | 国产精品系列在线播放| 欧美视频在线一区| 国产精品麻豆欧美日韩ww| 午夜精品久久久久久久久久久 | 久久激情综合网| 欧美亚洲一区二区三区四区| 国产日韩欧美制服另类| 日本va欧美va欧美va精品| 99riav一区二区三区| 26uuu亚洲| 日韩主播视频在线| 97久久久精品综合88久久| 26uuu欧美| 日韩av一区二区在线影视| 91麻豆成人久久精品二区三区| 精品处破学生在线二十三| 亚洲aaa精品| 日本高清免费不卡视频| 国产精品网友自拍| 国产激情视频一区二区三区欧美 | 麻豆一区二区三| 欧美亚一区二区| 亚洲欧美日韩国产一区二区三区 | 精品一区二区三区免费| 538prom精品视频线放| 一区二区三区在线视频播放 | 国产成人午夜精品影院观看视频| 欧美一区二区三区的| 五月激情综合婷婷| 欧美丰满嫩嫩电影| 亚洲高清在线精品| 在线看不卡av| 亚洲一区日韩精品中文字幕| 99精品视频中文字幕| 最新日韩av在线| 91浏览器打开|