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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? mat_gf2.cpp

?? 一個比較通用的大數(shù)運(yùn)算庫
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
      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

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本v片在线高清不卡在线观看| 国产精品久久久久久久久免费樱桃 | 免费视频最近日韩| 欧美一区二区三区色| 久久99热99| 国产亚洲一二三区| 成人av网址在线| 亚洲自拍偷拍九九九| 欧美猛男gaygay网站| 免费人成网站在线观看欧美高清| 欧美电影免费观看高清完整版在线观看| 日本亚洲三级在线| 久久久夜色精品亚洲| 成人免费黄色在线| 亚洲精品菠萝久久久久久久| 欧美精品久久99久久在免费线| 免费人成精品欧美精品| 久久夜色精品国产噜噜av| 不卡av电影在线播放| 亚洲国产欧美一区二区三区丁香婷| 欧美福利视频导航| 丁香激情综合国产| 亚洲国产精品久久久男人的天堂| 日韩免费一区二区| 99视频精品在线| 日韩激情在线观看| 中文字幕免费不卡在线| 欧美欧美欧美欧美| 国产成人免费9x9x人网站视频| 最新国产成人在线观看| 日韩欧美成人一区| 色综合久久综合中文综合网| 日本aⅴ精品一区二区三区| 中国av一区二区三区| 欧美精品视频www在线观看| 国产成人自拍网| 日韩高清一区二区| 亚洲视频香蕉人妖| 久久久久久久久久久99999| 91福利精品视频| 国产成人免费视频网站| 日韩高清在线观看| 一区二区三区在线免费| 久久精品视频一区二区| 欧美一区永久视频免费观看| 91首页免费视频| 成人影视亚洲图片在线| 日本欧美一区二区| 夜夜揉揉日日人人青青一国产精品| 精品精品国产高清a毛片牛牛| 在线免费不卡视频| 91网上在线视频| 国产精品香蕉一区二区三区| 蜜臀91精品一区二区三区| 亚洲午夜精品一区二区三区他趣| 中文字幕av在线一区二区三区| 日韩亚洲欧美成人一区| 欧美性xxxxxxxx| 91麻豆自制传媒国产之光| 国产福利一区二区三区| 国模大尺度一区二区三区| 青草av.久久免费一区| 日韩国产一二三区| 日日夜夜精品视频天天综合网| 一区二区三区丝袜| 亚洲图片另类小说| 亚洲视频在线一区| 综合久久久久久久| 综合久久久久久| 亚洲欧美日本在线| 亚洲日本丝袜连裤袜办公室| 国产精品拍天天在线| 国产精品免费av| 亚洲欧美一区二区三区极速播放| 国产精品传媒入口麻豆| 成人免费在线观看入口| 亚洲视频一区二区免费在线观看| 国产精品第一页第二页第三页| 国产精品美日韩| 亚洲图片另类小说| 夜夜爽夜夜爽精品视频| 日日骚欧美日韩| 麻豆精品在线播放| 国产乱妇无码大片在线观看| 国产一区二区三区最好精华液| 狠狠狠色丁香婷婷综合激情 | 亚洲一区二区五区| 亚洲最大成人综合| 婷婷久久综合九色综合伊人色| 五月综合激情婷婷六月色窝| 青娱乐精品视频| 激情五月激情综合网| 国产精品1区2区3区在线观看| 成人激情免费网站| 一本大道av一区二区在线播放| 欧洲在线/亚洲| 日韩精品专区在线影院重磅| 久久精品视频一区二区三区| 亚洲视频在线一区观看| 日韩精品亚洲一区| 国产一区二区三区黄视频 | 亚洲综合清纯丝袜自拍| 亚洲丶国产丶欧美一区二区三区| 亚洲国产精品人人做人人爽| 免费在线观看不卡| 成人av资源下载| 欧美日韩久久久一区| 精品剧情在线观看| 中文字幕综合网| 开心九九激情九九欧美日韩精美视频电影| 国产一区 二区| 欧美丝袜第三区| 久久青草国产手机看片福利盒子| 国产精品国产三级国产aⅴ入口 | 美女www一区二区| av中文字幕不卡| 欧美大片在线观看一区二区| 国产精品天美传媒| 五月激情综合婷婷| 成人av一区二区三区| 日韩美女一区二区三区| 亚洲靠逼com| 国产一区二区精品久久91| 色吊一区二区三区| 久久免费午夜影院| 午夜精品福利久久久| 成人国产精品免费观看| 欧美va亚洲va| 亚洲一区二区三区在线| 懂色av一区二区三区免费观看| 欧美精品丝袜中出| 亚洲美女区一区| 成人h版在线观看| 久久久99精品免费观看不卡| 亚洲国产精品天堂| 色哟哟一区二区| 国产嫩草影院久久久久| 久久99精品一区二区三区三区| 日本久久一区二区三区| 日本一区二区三区在线不卡| 麻豆精品久久精品色综合| 欧美日韩在线播放| 一区二区三区中文字幕精品精品| 国产精品中文字幕日韩精品 | 一区二区三区精密机械公司| 国产精品一区二区三区99| 91精品国产美女浴室洗澡无遮挡| 亚洲精品欧美专区| 91蜜桃在线免费视频| 国产蜜臀97一区二区三区| 激情图区综合网| 精品日韩av一区二区| 日本怡春院一区二区| 欧美日韩一区二区电影| 亚洲一区二区三区在线看| 色婷婷久久99综合精品jk白丝| 中文字幕在线免费不卡| 成人亚洲一区二区一| 国产精品视频一二三区| 成人在线一区二区三区| 中文字幕欧美日本乱码一线二线| 精品一区二区影视| 久久综合999| 国产一区二区三区综合| 国产欧美综合在线观看第十页| 国产乱子伦视频一区二区三区 | 亚洲综合偷拍欧美一区色| 91免费视频观看| 伊人色综合久久天天人手人婷| 91小宝寻花一区二区三区| 亚洲激情自拍视频| 欧美日韩精品二区第二页| 亚洲va韩国va欧美va精品| 日韩一区二区三区观看| 久久不见久久见中文字幕免费| 精品国产一区二区三区久久影院 | 精品伦理精品一区| 美女久久久精品| 中文一区二区在线观看| 色国产精品一区在线观看| 久久国产精品露脸对白| 日韩一区在线免费观看| 欧美成人女星排名| 91丨九色丨蝌蚪富婆spa| 麻豆精品在线观看| 艳妇臀荡乳欲伦亚洲一区| 久久久精品人体av艺术| 欧美美女直播网站| 99视频有精品| 国产精品一二三在| 视频一区视频二区中文| 中文字幕一区在线观看| 久久影院午夜论| 欧美日韩一区三区| 99久久精品免费看国产| 狠狠色狠狠色综合日日91app| 亚洲第一精品在线| 中文字幕一区二区三区视频| 久久综合狠狠综合久久激情| 91精品免费观看|