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

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

?? lll_fp.cpp

?? 一個比較通用的大數(shù)運(yùn)算庫
?? CPP
?? 第 1 頁 / 共 3 頁
字號:

      BKZConstant(i) = x*y/c_PI;
   }
}

static vec_double BKZThresh;

static 
void ComputeBKZThresh(double *c, long beta)
{
   BKZThresh.SetLength(beta-1);

   long i;
   double x;

   x = 0;

   for (i = 1; i <= beta-1; i++) {
      x += log(c[i-1]);
      BKZThresh(i) = exp(x/double(i))*BKZConstant(i);
      if (!IsFinite(&BKZThresh(i))) BKZThresh(i) = 0;
   }
}

static 
void BKZStatus(double tt, double enum_time, unsigned long NumIterations, 
               unsigned long NumTrivial, unsigned long NumNonTrivial, 
               unsigned long NumNoOps, long m, 
               const mat_ZZ& B)
{
   cerr << "---- BKZ_FP status ----\n";
   cerr << "elapsed time: ";
   PrintTime(cerr, tt-StartTime);
   cerr << ", enum time: ";
   PrintTime(cerr, enum_time);
   cerr << ", iter: " << NumIterations << "\n";
   cerr << "triv: " << NumTrivial;
   cerr << ", nontriv: " << NumNonTrivial;
   cerr << ", no ops: " << NumNoOps;
   cerr << ", rank: " << m;
   cerr << ", swaps: " << NumSwaps << "\n";



   ZZ t1;
   long i;
   double prodlen = 0;

   for (i = 1; i <= m; i++) {
      InnerProduct(t1, B(i), B(i));
      if (!IsZero(t1))
         prodlen += log(t1);
   }

   cerr << "log of prod of lengths: " << prodlen/(2.0*log(2.0)) << "\n";


   if (LLLDumpFile) {
      cerr << "dumping to " << LLLDumpFile << "...";

      ofstream f;
      OpenWrite(f, LLLDumpFile);
      
      f << "[";
      for (i = 1; i <= m; i++) {
         f << B(i) << "\n";
      }
      f << "]\n";

      f.close();

      cerr << "\n";
   }

   LastTime = tt;
   
}



static
long BKZ_FP(mat_ZZ& BB, mat_ZZ* UU, double delta, 
         long beta, long prune, LLLCheckFct check)
{

   

   long m = BB.NumRows();
   long n = BB.NumCols();
   long m_orig = m;
   
   long i, j;
   ZZ MU;

   double t1;
   ZZ T1;
   double *tp;

   init_red_fudge();

   mat_ZZ B;
   B = BB;

   B.SetDims(m+1, n);


   double **B1;  // approximates B

   typedef double *doubleptr;

   B1 = NTL_NEW_OP doubleptr[m+2];
   if (!B1) Error("BKZ_FP: out of memory");

   for (i = 1; i <= m+1; i++) {
      B1[i] = NTL_NEW_OP double[n+1];
      if (!B1[i]) Error("BKZ_FP: out of memory");
   }

   double **mu;
   mu = NTL_NEW_OP doubleptr[m+2];
   if (!mu) Error("LLL_FP: out of memory");

   for (i = 1; i <= m+1; i++) {
      mu[i] = NTL_NEW_OP double[m+1];
      if (!mu[i]) Error("BKZ_FP: out of memory");
   }


   double *c; // squared lengths of Gramm-Schmidt basis vectors

   c = NTL_NEW_OP double[m+2];
   if (!c) Error("BKZ_FP: out of memory");

   double *b; // squared lengths of basis vectors

   b = NTL_NEW_OP double[m+2];
   if (!b) Error("BKZ_FP: out of memory");

   double cbar;

   double *ctilda;
   ctilda = NTL_NEW_OP double[m+2];
   if (!ctilda) Error("BKZ_FP: out of memory");

   double *vvec;
   vvec = NTL_NEW_OP double[m+2];
   if (!vvec) Error("BKZ_FP: out of memory");

   double *yvec;
   yvec = NTL_NEW_OP double[m+2];
   if (!yvec) Error("BKZ_FP: out of memory");

   double *uvec;
   uvec = NTL_NEW_OP double[m+2];
   if (!uvec) Error("BKZ_FP: out of memory");

   double *utildavec;
   utildavec = NTL_NEW_OP double[m+2];
   if (!utildavec) Error("BKZ_FP: out of memory");


   long *Deltavec;
   Deltavec = NTL_NEW_OP long[m+2];
   if (!Deltavec) Error("BKZ_FP: out of memory");

   long *deltavec;
   deltavec = NTL_NEW_OP long[m+2];
   if (!deltavec) Error("BKZ_FP: out of memory");

   mat_ZZ Ulocal;
   mat_ZZ *U;

   if (UU) {
      Ulocal.SetDims(m+1, m);
      for (i = 1; i <= m; i++)
         conv(Ulocal(i, i), 1);
      U = &Ulocal;
   }
   else
      U = 0;

   long quit;
   long new_m;
   long z, jj, kk;
   long s, t;
   long h;
   double eta;


   for (i = 1; i <=m; i++)
      for (j = 1; j <= n; j++) {
         conv(B1[i][j], B(i, j));
         CheckFinite(&B1[i][j]);
      }

         
   for (i = 1; i <= m; i++) {
      b[i] = InnerProduct(B1[i], B1[i], n);
      CheckFinite(&b[i]);
   }



   m = ll_LLL_FP(B, U, delta, 0, check, B1, mu, b, c, m, 1, quit);

   double tt;

   double enum_time = 0;
   unsigned long NumIterations = 0;
   unsigned long NumTrivial = 0;
   unsigned long NumNonTrivial = 0;
   unsigned long NumNoOps = 0;

   long verb = verbose;

   verbose = 0;

   long clean = 1;

   if (m < m_orig) {
      for (i = m_orig+1; i >= m+2; i--) {
         // swap i, i-1

         swap(B(i), B(i-1));
         if (U) swap((*U)(i), (*U)(i-1));
      }
   }

   if (!quit && m > 1) {
      if (beta > m) beta = m;

      if (prune > 0) 
         ComputeBKZConstant(beta, prune);

      z = 0;
      jj = 0;
   
      while (z < m-1) {
         jj++;
         kk = min(jj+beta-1, m);
   
         if (jj == m) {
            jj = 1;
            kk = beta;
            clean = 1;
         }

         if (verb) {
            tt = GetTime();
            if (tt > LastTime + LLLStatusInterval)
               BKZStatus(tt, enum_time, NumIterations, NumTrivial,
                         NumNonTrivial, NumNoOps, m, B);
         }

   
         // ENUM

         double tt1;

         if (verb) {
            tt1 = GetTime();
         }


         if (prune > 0)
            ComputeBKZThresh(&c[jj], kk-jj+1);

   
         cbar = c[jj];
         utildavec[jj] = uvec[jj] = 1;
   
         yvec[jj] = vvec[jj] = 0;
         Deltavec[jj] = 0;
   
   
         s = t = jj;
         deltavec[jj] = 1;
   
         for (i = jj+1; i <= kk+1; i++) {
            ctilda[i] = uvec[i] = utildavec[i] = yvec[i] = 0;
            Deltavec[i] = 0;
            vvec[i] = 0;
            deltavec[i] = 1;
         }

         long enum_cnt = 0;
   
         while (t <= kk) {
            if (verb) {
               enum_cnt++;
               if (enum_cnt > 100000) {
                  enum_cnt = 0;
                  tt = GetTime();
                  if (tt > LastTime + LLLStatusInterval) {
                     enum_time += tt - tt1;
                     tt1 = tt;
                     BKZStatus(tt, enum_time, NumIterations, NumTrivial,
                               NumNonTrivial, NumNoOps, m, B);
                  }
               }
            }

            ctilda[t] = ctilda[t+1] + 
               (yvec[t]+utildavec[t])*(yvec[t]+utildavec[t])*c[t];

            ForceToMem(&ctilda[t]);  // prevents an infinite loop
   
            if (prune > 0 && t > jj) {
               eta = BKZThresh(t-jj);
            }
            else
               eta = 0;
   
            if (ctilda[t] < cbar - eta) {
               if (t > jj) {
                  t--;
                  t1 = 0;
                  for (i = t+1; i <= s; i++)
                     t1 += utildavec[i]*mu[i][t];
                  yvec[t] = t1;
                  t1 = -t1;
                  if (t1 >= 0)
                     t1 = ceil(t1-0.5);
                  else
                     t1 = floor(t1+0.5);
                  utildavec[t] = vvec[t] = t1;
                  Deltavec[t] = 0;
                  if (utildavec[t] > -yvec[t]) 
                     deltavec[t] = -1;
                  else
                     deltavec[t] = 1;
               }
               else {
                  cbar = ctilda[jj];
                  for (i = jj; i <= kk; i++) {
                     uvec[i] = utildavec[i];
                  }
               }
            }
            else {
               t++;
               s = max(s, t);
               if (t < s) Deltavec[t] = -Deltavec[t];
               if (Deltavec[t]*deltavec[t] >= 0) Deltavec[t] += deltavec[t];
               utildavec[t] = vvec[t] + Deltavec[t];
            }
         }

         if (verb) {
            tt1 = GetTime() - tt1;
            enum_time += tt1;
         }
         
         NumIterations++;
   
         h = min(kk+1, m);
   
         if ((delta - 8*red_fudge)*c[jj] > cbar) {

            clean = 0;

            // we treat the case that the new vector is b_s (jj < s <= kk)
            // as a special case that appears to occur most of the time.
   
            s = 0;
            for (i = jj+1; i <= kk; i++) {
               if (uvec[i] != 0) {
                  if (s == 0)
                     s = i;
                  else
                     s = -1;
               }
            }
   
            if (s == 0) Error("BKZ_FP: internal error");
   
            if (s > 0) {
               // special case

               NumTrivial++;
   
               for (i = s; i > jj; i--) {
                  // swap i, i-1
                  swap(B(i-1), B(i));
                  if (U) swap((*U)(i-1), (*U)(i));
                  tp = B1[i-1]; B1[i-1] = B1[i]; B1[i] = tp;
                  t1 = b[i-1]; b[i-1] = b[i]; b[i] = t1;
               }
   
               // cerr << "special case\n";
               new_m = ll_LLL_FP(B, U, delta, 0, check, 
                                B1, mu, b, c, h, jj, quit);
               if (new_m != h) Error("BKZ_FP: internal error");
               if (quit) break;
            }
            else {
               // the general case

               NumNonTrivial++;
   
               for (i = 1; i <= n; i++) conv(B(m+1, i), 0);

               if (U) {
                  for (i = 1; i <= m_orig; i++)
                     conv((*U)(m+1, i), 0);
               }

               for (i = jj; i <= kk; i++) {
                  if (uvec[i] == 0) continue;
                  conv(MU, uvec[i]);
                  RowTransform2(B(m+1), B(i), MU);
                  if (U) RowTransform2((*U)(m+1), (*U)(i), MU);
               }
      
               for (i = m+1; i >= jj+1; i--) {
                  // swap i, i-1
                  swap(B(i-1), B(i));
                  if (U) swap((*U)(i-1), (*U)(i));
                  tp = B1[i-1]; B1[i-1] = B1[i]; B1[i] = tp;
                  t1 = b[i-1]; b[i-1] = b[i]; b[i] = t1;
               }
      
               for (i = 1; i <= n; i++) {
                  conv(B1[jj][i], B(jj, i));
                  CheckFinite(&B1[jj][i]);
               }
      
               b[jj] = InnerProduct(B1[jj], B1[jj], n);
               CheckFinite(&b[jj]);
      
               if (b[jj] == 0) Error("BKZ_FP: internal error"); 
      
               // remove linear dependencies
   
               // cerr << "general case\n";
               new_m = ll_LLL_FP(B, U, delta, 0, 0, B1, mu, b, c, kk+1, jj, quit);
              
               if (new_m != kk) Error("BKZ_FP: internal error"); 

               // remove zero vector
      
               for (i = kk+2; i <= m+1; i++) {
                  // swap i, i-1
                  swap(B(i-1), B(i));
                  if (U) swap((*U)(i-1), (*U)(i));
                  tp = B1[i-1]; B1[i-1] = B1[i]; B1[i] = tp;
                  t1 = b[i-1]; b[i-1] = b[i]; b[i] = t1;
               }
      
               quit = 0;
               if (check) {
                  for (i = 1; i <= kk; i++)
                     if ((*check)(B(i))) {
                        quit = 1;
                        break;
                     }
               }

               if (quit) break;
   
               if (h > kk) {
                  // extend reduced basis
   
                  new_m = ll_LLL_FP(B, U, delta, 0, check, 
                                   B1, mu, b, c, h, h, quit);
   
                  if (new_m != h) Error("BKZ_FP: internal error");
                  if (quit) break;
               }
            }
   
            z = 0;
         }
         else {
            // LLL_FP
            // cerr << "progress\n";

            NumNoOps++;

            if (!clean) {
               new_m = 
                  ll_LLL_FP(B, U, delta, 0, check, B1, mu, b, c, h, h, quit);
               if (new_m != h) Error("BKZ_FP: internal error");
               if (quit) break;
            }
   
            z++;
         }
      }
   }


   if (verb) {
      BKZStatus(GetTime(), enum_time, NumIterations, NumTrivial, NumNonTrivial, 
                NumNoOps, m, B);
   }

   // clean up


   if (m_orig > m) {
      // for consistency, we move zero vectors to the front

      for (i = m+1; i <= m_orig; i++) {
         swap(B(i), B(i+1));
         if (U) swap((*U)(i), (*U)(i+1));
      }

      for (i = 0; i < m; i++) {
         swap(B(m_orig-i), B(m-i));
         if (U) swap((*U)(m_orig-i), (*U)(m-i));
      }
   }

   B.SetDims(m_orig, n);
   BB = B;

   if (U) {
      U->SetDims(m_orig, m_orig);
      *UU = *U;
   }

   for (i = 1; i <= m_orig+1; i++) {
      delete [] B1[i];
   }

   delete [] B1;

   for (i = 1; i <= m_orig+1; i++) {
      delete [] mu[i];
   }

   delete [] mu;

   delete [] c;
   delete [] b;
   delete [] ctilda;
   delete [] vvec;
   delete [] yvec;
   delete [] uvec;
   delete [] utildavec;
   delete [] Deltavec;
   delete [] deltavec;

   return m;
}

long BKZ_FP(mat_ZZ& BB, mat_ZZ& UU, double delta, 
         long beta, long prune, LLLCheckFct check, long verb)
{
   verbose = verb;
   RR_GS_time = 0;
   NumSwaps = 0;
   if (verbose) {
      StartTime = GetTime();
      LastTime = StartTime;
   }

   if (delta < 0.50 || delta >= 1) Error("BKZ_FP: bad delta");
   if (beta < 2) Error("BKZ_FP: bad block size");

   return BKZ_FP(BB, &UU, delta, beta, prune, check);
}

long BKZ_FP(mat_ZZ& BB, double delta, 
         long beta, long prune, LLLCheckFct check, long verb)
{
   verbose = verb;
   RR_GS_time = 0;
   NumSwaps = 0;
   if (verbose) {
      StartTime = GetTime();
      LastTime = StartTime;
   }

   if (delta < 0.50 || delta >= 1) Error("BKZ_FP: bad delta");
   if (beta < 2) Error("BKZ_FP: bad block size");

   return BKZ_FP(BB, 0, delta, beta, prune, check);
}


NTL_END_IMPL

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美三级一区二区| 亚洲精品一区二区三区蜜桃下载 | 国产精品国产三级国产aⅴ中文| 日本高清不卡aⅴ免费网站| 毛片av一区二区三区| 亚洲天堂免费看| 久久综合狠狠综合| 欧美日韩激情一区二区| 成人99免费视频| 激情六月婷婷综合| 午夜精品视频一区| 亚洲精品日韩专区silk| 国产日产欧美一区二区三区| 欧美一三区三区四区免费在线看 | 日韩网站在线看片你懂的| 91丨porny丨蝌蚪视频| 国产麻豆一精品一av一免费| 午夜免费久久看| 亚洲男帅同性gay1069| 国产欧美日韩精品一区| 欧美变态凌虐bdsm| 6080国产精品一区二区| 欧美亚洲国产bt| 91蜜桃传媒精品久久久一区二区| 国产成人在线看| 国产专区欧美精品| 国产在线精品一区二区 | 色综合色综合色综合| 国产成人免费视频一区| 国产精品亚洲专一区二区三区| 日本91福利区| 日本91福利区| 看国产成人h片视频| 免费久久99精品国产| 三级在线观看一区二区| 首页欧美精品中文字幕| 天天亚洲美女在线视频| 石原莉奈在线亚洲二区| 蜜臀av一区二区三区| 久久国产麻豆精品| 免费人成黄页网站在线一区二区| 日本在线不卡视频| 奇米精品一区二区三区在线观看一| 婷婷一区二区三区| 蜜臀国产一区二区三区在线播放| 奇米影视一区二区三区| 美女mm1313爽爽久久久蜜臀| 久久成人av少妇免费| 精品在线亚洲视频| 国产精品一二三区在线| 99久久精品99国产精品| 色www精品视频在线观看| 日本乱码高清不卡字幕| 欧美日韩国产精品成人| 日韩三级视频中文字幕| 久久久不卡网国产精品二区| 欧美国产成人在线| 亚洲日本成人在线观看| 午夜激情综合网| 另类欧美日韩国产在线| 成人综合激情网| 91免费看视频| 欧美日韩精品三区| 亚洲精品一区二区三区香蕉| 亚洲国产精品精华液2区45| 中文字幕一区二区三区色视频| 亚洲一区二区三区不卡国产欧美| 亚洲aⅴ怡春院| 国产美女精品人人做人人爽| 波多野结衣亚洲一区| 欧美亚洲国产一区二区三区va| 日韩欧美不卡一区| 国产精品进线69影院| 亚洲第一综合色| 国产尤物一区二区| 欧美自拍偷拍一区| 精品国产网站在线观看| 中文字幕一区在线观看视频| 亚洲成av人片在线| 国产一区二区三区香蕉| 色婷婷精品久久二区二区蜜臂av| 日韩欧美国产三级| 亚洲欧美激情小说另类| 蜜桃视频在线一区| 91在线免费看| 日韩精品一区二| 艳妇臀荡乳欲伦亚洲一区| 久久狠狠亚洲综合| 欧美在线你懂得| 国产午夜一区二区三区| 一区二区三区加勒比av| 国产一区在线观看麻豆| 欧美日韩1区2区| 国产精品免费网站在线观看| 日韩不卡一区二区| 97se亚洲国产综合在线| 欧美mv和日韩mv国产网站| 亚洲精品日韩专区silk| 国产凹凸在线观看一区二区| 欧美精品乱人伦久久久久久| 中文字幕在线观看一区| 国内精品第一页| 制服.丝袜.亚洲.中文.综合| 亚洲欧美日韩在线不卡| 国产一区二区三区日韩| 在线成人av网站| 亚洲精品乱码久久久久久| 国产91丝袜在线播放| 日韩精品一区二区三区三区免费| 一区二区三区电影在线播| 国产ts人妖一区二区| 欧美大白屁股肥臀xxxxxx| 亚洲国产精品一区二区尤物区| 成人天堂资源www在线| 欧美v日韩v国产v| 日韩精品电影在线观看| 欧美午夜精品一区二区三区| 自拍偷拍国产精品| www.日韩av| 国产色爱av资源综合区| 久草中文综合在线| 日韩一区二区在线看| 亚洲成人av一区二区三区| 一本高清dvd不卡在线观看| 国产精品毛片久久久久久久| 国产成人午夜精品5599| 国产色产综合产在线视频| 国产一区二区三区久久悠悠色av| 欧美一级久久久久久久大片| 天使萌一区二区三区免费观看| 欧美色窝79yyyycom| 亚洲一区影音先锋| 欧美亚洲一区三区| 伊人色综合久久天天| 99精品热视频| 亚洲日本在线天堂| 欧洲一区二区三区在线| 亚洲综合色在线| 欧美情侣在线播放| 日韩有码一区二区三区| 欧美一区二区不卡视频| 久久91精品久久久久久秒播| 久久久久久免费网| www.亚洲激情.com| 亚洲免费av观看| 欧美日韩在线三级| 日韩和欧美的一区| 精品久久久久久久久久久久久久久久久| 麻豆国产欧美日韩综合精品二区| 精品人在线二区三区| 国产一区二区调教| 亚洲欧美中日韩| 欧美在线色视频| 轻轻草成人在线| 久久久久国产精品免费免费搜索| 丁香婷婷综合色啪| 樱桃视频在线观看一区| 欧美精品一卡二卡| 国内成人免费视频| 国产精品灌醉下药二区| 色婷婷激情久久| 日本在线不卡视频一二三区| 久久久久青草大香线综合精品| 成人a区在线观看| 亚洲国产欧美日韩另类综合 | 久久网站最新地址| 波多野结衣的一区二区三区| 夜夜嗨av一区二区三区网页| 制服丝袜亚洲色图| 成人福利视频在线| 首页综合国产亚洲丝袜| 国产欧美日韩视频在线观看| 日本高清无吗v一区| 久草精品在线观看| 一区二区在线看| 久久免费午夜影院| 色域天天综合网| 久久精品理论片| 亚洲欧美日韩一区二区| 精品国产一区二区三区忘忧草| 99久久久免费精品国产一区二区| 日精品一区二区| 国产精品乱子久久久久| 欧美一区二区三区喷汁尤物| 国产成人自拍网| 日产国产高清一区二区三区| 国产精品天干天干在线综合| 91精品国产一区二区人妖| a在线播放不卡| 久久国产精品第一页| 亚洲免费观看高清完整版在线观看 | 91亚洲精品乱码久久久久久蜜桃| 中文字幕亚洲一区二区av在线| 欧美丰满一区二区免费视频| 成人精品免费网站| 蜜臀av一区二区在线观看| 亚洲精品久久7777| 久久久国产精华| 日韩精品一区在线| 欧美三级电影网|