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

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

?? g_lll_qp.cpp

?? 一個比較通用的大數運算庫
?? CPP
?? 第 1 頁 / 共 4 頁
字號:

#include <NTL/LLL.h>
#include <NTL/vec_quad_float.h>
#include <NTL/fileio.h>


#include <NTL/new.h>

NTL_START_IMPL


static inline
void CheckFinite(double *p)
{
   if (!IsFinite(p)) Error("G_LLL_QP: numbers too big...use G_LLL_XD");
}


static inline
void CheckFinite(quad_float *p)
{
   if (!IsFinite(p)) Error("G_LLL_QP: numbers too big...use G_LLL_XD");
}



static void RowTransform(vec_ZZ& A, vec_ZZ& B, const ZZ& MU1)
// x = x - y*MU
{
   static ZZ T, MU;
   long k;

   long n = A.length();
   long i;

   MU = MU1;

   if (MU == 1) {
      for (i = 1; i <= n; i++)
         sub(A(i), A(i), B(i));

      return;
   }

   if (MU == -1) {
      for (i = 1; i <= n; i++)
         add(A(i), A(i), B(i));

      return;
   }

   if (MU == 0) return;

   if (NumTwos(MU) >= NTL_ZZ_NBITS) 
      k = MakeOdd(MU);
   else
      k = 0;


   if (MU.WideSinglePrecision()) {
      long mu1;
      conv(mu1, MU);

      for (i = 1; i <= n; i++) {
         mul(T, B(i), mu1);
         if (k > 0) LeftShift(T, T, k);
         sub(A(i), A(i), T);
      }
   }
   else {
      for (i = 1; i <= n; i++) {
         mul(T, B(i), MU);
         if (k > 0) LeftShift(T, T, k);
         sub(A(i), A(i), T);
      }
   }
}

#define TR_BND (NTL_FDOUBLE_PRECISION/2.0)
// Just to be safe!!

static double max_abs(quad_float *v, long n)
{
   long i;
   double res, t;

   res = 0;

   for (i = 1; i <= n; i++) {
      t = fabs(v[i].hi);
      if (t > res) res = t;
   }

   return res;
}


static void RowTransformStart(quad_float *a, long *in_a, long& in_float, long n)
{
   long i;
   long inf = 1;

   for (i = 1; i <= n; i++) {
      in_a[i] = (a[i].hi < TR_BND && a[i].hi > -TR_BND);
      inf = inf & in_a[i];
   }

   in_float = inf;
}


static void RowTransformFinish(vec_ZZ& A, quad_float *a, long *in_a)
{
   long n = A.length();
   long i;

   for (i = 1; i <= n; i++) {
      if (in_a[i])  {
         conv(A(i), a[i].hi);
      }
      else {
         conv(a[i], A(i));
         CheckFinite(&a[i]);
      }
   }
}



   



static void RowTransform(vec_ZZ& A, vec_ZZ& B, const ZZ& MU1, 
                         quad_float *a, quad_float *b, long *in_a, 
                         double& max_a, double max_b, long& in_float)
// x = x - y*MU
{
   static ZZ T, MU;
   long k;
   double mu;


   long n = A.length();
   long i;

   conv(mu, MU1);
   CheckFinite(&mu);

   if (in_float) {
      double mu_abs = fabs(mu);
      if (mu_abs > 0 && max_b > 0 && (mu_abs >= TR_BND || max_b >= TR_BND)) {
         in_float = 0;
      }
      else {
         max_a += mu_abs*max_b;
         if (max_a >= TR_BND)
            in_float = 0;
      }
   }

   if (in_float) {
      if (mu == 1) {
         for (i = 1; i <= n; i++)
            a[i].hi -= b[i].hi;

         return;
      }

      if (mu == -1) {
         for (i = 1; i <= n; i++)
            a[i].hi += b[i].hi;

         return;
      }

      if (mu == 0) return;

      for (i = 1; i <= n; i++)
         a[i].hi -= mu*b[i].hi;


      return;
   }

   MU = MU1;

   if (MU == 1) {
      for (i = 1; i <= n; i++) {
         if (in_a[i] && a[i].hi < TR_BND && a[i].hi > -TR_BND &&
             b[i].hi < TR_BND && b[i].hi > -TR_BND) {

            a[i].hi -= b[i].hi;
         }
         else {
            if (in_a[i]) {
               conv(A(i), a[i].hi);
               in_a[i] = 0;
            }

            sub(A(i), A(i), B(i));
         }
      }

      return;
   }

   if (MU == -1) {
      for (i = 1; i <= n; i++) {
         if (in_a[i] && a[i].hi < TR_BND && a[i].hi > -TR_BND &&
             b[i].hi < TR_BND && b[i].hi > -TR_BND) {

            a[i].hi += b[i].hi;
         }
         else {
            if (in_a[i]) {
               conv(A(i), a[i].hi);
               in_a[i] = 0;
            }

            add(A(i), A(i), B(i));
         }
      }

      return;
   }

   if (MU == 0) return;

   double b_bnd = fabs(TR_BND/mu) - 1;
   if (b_bnd < 0) b_bnd = 0;


   if (NumTwos(MU) >= NTL_ZZ_NBITS) 
      k = MakeOdd(MU);
   else
      k = 0;


   if (MU.WideSinglePrecision()) {
      long mu1;
      conv(mu1, MU);

      if (k > 0) {
         for (i = 1; i <= n; i++) {
            if (in_a[i]) {
               conv(A(i), a[i].hi);
               in_a[i] = 0;
            }

            mul(T, B(i), mu1);
            LeftShift(T, T, k);
            sub(A(i), A(i), T);
         }
      }
      else {
         for (i = 1; i <= n; i++) {
            if (in_a[i] && a[i].hi < TR_BND && a[i].hi > -TR_BND &&
                b[i].hi < b_bnd && b[i].hi > -b_bnd) {
  
               a[i].hi -= b[i].hi*mu;
            }
            else {
               if (in_a[i]) {
                  conv(A(i), a[i].hi);
                  in_a[i] = 0;
               }
               mul(T, B(i), mu1);
               sub(A(i), A(i), T);
           }
         }
      }
   }
   else {
      for (i = 1; i <= n; i++) {
         if (in_a[i]) {
            conv(A(i), a[i].hi);
            in_a[i] = 0;
         }
         mul(T, B(i), MU);
         if (k > 0) LeftShift(T, T, k);
         sub(A(i), A(i), T);
      }
   }
}

static void RowTransform2(vec_ZZ& A, vec_ZZ& B, const ZZ& MU1)
// x = x + y*MU
{
   static ZZ T, MU;
   long k;

   long n = A.length();
   long i;

   MU = MU1;

   if (MU == 1) {
      for (i = 1; i <= n; i++)
         add(A(i), A(i), B(i));

      return;
   }

   if (MU == -1) {
      for (i = 1; i <= n; i++)
         sub(A(i), A(i), B(i));

      return;
   }

   if (MU == 0) return;

   if (NumTwos(MU) >= NTL_ZZ_NBITS) 
      k = MakeOdd(MU);
   else
      k = 0;

   if (MU.WideSinglePrecision()) {
      long mu1;
      conv(mu1, MU);

      for (i = 1; i <= n; i++) {
         mul(T, B(i), mu1);
         if (k > 0) LeftShift(T, T, k);
         add(A(i), A(i), T);
      }
   }
   else {
      for (i = 1; i <= n; i++) {
         mul(T, B(i), MU);
         if (k > 0) LeftShift(T, T, k);
         add(A(i), A(i), T);
      }
   }
}
class GivensCache_QP {
public:
   GivensCache_QP(long m, long n);
   ~GivensCache_QP();

   void flush();
   void selective_flush(long l);
   void swap(long l);
   void swap();
   void touch();
   void incr();

   long sz;

   quad_float **buf;
   long *bl;
   long *bv;
   long bp;
};


GivensCache_QP::GivensCache_QP(long m, long n)
{
   sz = min(m, n)/10;
   if (sz < 2) 
      sz = 2;
   else if (sz > 20)
      sz = 20;

   typedef quad_float *quad_floatptr;

   long i;
   buf = NTL_NEW_OP quad_floatptr[sz]; 
   if (!buf) Error("out of memory");
   for (i = 0; i < sz; i++)
      if (!(buf[i] = NTL_NEW_OP quad_float[n+1])) Error("out of memory");

   bl = NTL_NEW_OP long[sz];
   if (!bl) Error("out of memory");
   for (i = 0; i < sz; i++) bl[0] = 0;

   bv = NTL_NEW_OP long[sz];
   if (!bv) Error("out of memory");
   for (i = 0; i < sz; i++) bv[0] = 0;

   bp = 0;
}

GivensCache_QP::~GivensCache_QP()
{
   long i;

   for (i = 0; i < sz; i++) delete [] buf[i];
   delete [] buf;
   delete [] bl;
   delete [] bv;
}

void GivensCache_QP::flush()
{
   long i;
   for (i = 0; i < sz; i++) bl[i] = 0;
}

void GivensCache_QP::selective_flush(long l)
{
   long i;

   for (i = 0; i < sz; i++)
      if (bl[i] && bv[i] >= l)
         bl[i] = 0;
}

void GivensCache_QP::swap(long l)
{
   long k = bl[bp];
   long i;

   i = 0;
   while (i < sz && bl[i] != l)
      i++;

   if (i < sz) {
      bl[bp] = l;
      bl[i] = k;
   }
   else
      bl[bp] = l;

   selective_flush(l);
}

void GivensCache_QP::swap()
{
   swap(bl[bp] - 1);
}

void GivensCache_QP::touch()
{
   long k = bl[bp];
   bl[bp] = 0;
   selective_flush(k);
}

void GivensCache_QP::incr()
{
   long k = bl[bp];
   long k1 = k+1;
   long i;

   i = 0;
   while (i < sz && bl[i] != k1)
      i++;

   if (i < sz) {
      bp = i;
      return;
   }

   i = 0; 
   while (i < sz && bl[i] != 0)
      i++;

   if (i < sz) {
      bp = i;
      return;
   }

   long max_val = 0;
   long max_index = 0;
   for (i = 0; i < sz; i++) {
      long t = labs(bl[i]-k1);
      if (t > max_val) {
         max_val = t;
         max_index = i;
      }
   }

   bp = max_index;
   bl[max_index] = 0;
}


static
void GivensComputeGS(quad_float **B1, quad_float **mu, quad_float **aux, long k, long n,
                     GivensCache_QP& cache)
{
   long i, j;

   quad_float c, s, a, b, t;

   quad_float *p = mu[k];

   quad_float *pp = cache.buf[cache.bp];

   if (!cache.bl[cache.bp]) {
      for (j = 1; j <= n; j++)
         pp[j] = B1[k][j];

      long backoff;
      backoff = k/4;
      if (backoff < 2)
         backoff = 2;
      else if (backoff > cache.sz + 2)
         backoff = cache.sz + 2; 

      long ub = k-(backoff-1);

      for (i = 1; i < ub; i++) {
         quad_float *cptr = mu[i];
         quad_float *sptr = aux[i];
   
         for (j = n; j > i; j--) {
            c = cptr[j];
            s = sptr[j];
   
            a = c*pp[j-1] - s*pp[j];
            b = s*pp[j-1] + c*pp[j];
   
            pp[j-1] = a;
            pp[j] = b;
         }
   
         pp[i] = pp[i]/mu[i][i]; 
      }

      cache.bl[cache.bp] = k;
      cache.bv[cache.bp] = k-backoff;
   }

   for (j = 1; j <= n; j++)
      p[j] = pp[j];

   for (i = max(cache.bv[cache.bp]+1, 1); i < k; i++) {
      quad_float *cptr = mu[i];
      quad_float *sptr = aux[i];
  
      for (j = n; j > i; j--) {
         c = cptr[j];
         s = sptr[j];
  
         a = c*p[j-1] - s*p[j];
         b = s*p[j-1] + c*p[j];
  
         p[j-1] = a;
         p[j] = b;
      }
  
      p[i] = p[i]/mu[i][i];

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
天堂精品中文字幕在线| 色婷婷亚洲精品| 美女精品一区二区| 五月综合激情日本mⅴ| 午夜激情一区二区三区| 亚洲一区二区三区美女| 亚洲福利视频一区| 三级精品在线观看| 日韩高清一区在线| 日韩激情中文字幕| 六月丁香婷婷久久| 激情综合一区二区三区| 国产成人亚洲精品青草天美| 大白屁股一区二区视频| 91视频国产资源| 欧美日韩综合色| 制服丝袜亚洲网站| 精品久久久网站| 国产欧美精品一区二区色综合| 中文字幕av在线一区二区三区| 国产精品成人免费| 亚洲午夜精品久久久久久久久| 石原莉奈一区二区三区在线观看| 蜜乳av一区二区| 成人午夜激情影院| 一本色道亚洲精品aⅴ| 欧美丰满美乳xxx高潮www| 91精品欧美久久久久久动漫| 欧美精品一区二区三| 国产欧美精品一区二区色综合朱莉| 国产精品色哟哟网站| 亚洲一区二区三区四区五区黄 | 亚洲欧美日韩在线| 亚洲成人自拍网| 国产一区二区三区香蕉 | 欧美一区二区精品| 久久久久久亚洲综合影院红桃| 国产精品久久久久一区二区三区共| 国产精品久久国产精麻豆99网站| 亚洲国产视频直播| 国产麻豆精品在线| 在线视频国产一区| 精品国产一区二区三区久久久蜜月 | 亚洲欧美另类久久久精品| 美女www一区二区| 日韩av不卡一区二区| 亚洲国产美女搞黄色| 精品一区二区三区在线播放视频| 成人黄色a**站在线观看| 欧美日韩在线免费视频| 久久免费看少妇高潮| 亚洲国产精品欧美一二99| 国产一区 二区| 欧美亚洲尤物久久| 国产欧美日韩精品a在线观看| 亚洲高清视频的网址| 成人午夜短视频| 日韩欧美国产三级电影视频| 亚洲日本va午夜在线电影| 热久久久久久久| 91麻豆免费看| 久久日韩精品一区二区五区| 亚洲午夜久久久久久久久久久 | 99精品热视频| 日韩欧美亚洲国产另类| 亚洲福利视频一区二区| 成人午夜av在线| 日韩欧美一级二级三级| 亚洲一级电影视频| 99国产精品久久久久久久久久久| 精品1区2区在线观看| 亚洲综合一二三区| www..com久久爱| www久久精品| 免费看欧美美女黄的网站| 日本电影欧美片| 国产精品国产三级国产| 国产精品88av| 精品国产一区二区精华| 日韩国产成人精品| 欧美亚洲动漫制服丝袜| 亚洲素人一区二区| 丁香六月久久综合狠狠色| 欧美tickle裸体挠脚心vk| 日韩精品91亚洲二区在线观看| 在线国产电影不卡| **欧美大码日韩| 丁香天五香天堂综合| 久久久影视传媒| 精品中文字幕一区二区| 欧美一区二区三区免费观看视频| 亚洲成人1区2区| 欧美写真视频网站| 一区二区三区在线免费| 91无套直看片红桃| 亚洲三级久久久| 一本色道久久综合亚洲91| 中文字幕在线不卡国产视频| 粉嫩在线一区二区三区视频| 久久久亚洲国产美女国产盗摄 | 亚洲一区二区三区四区在线| 91碰在线视频| 亚洲欧美经典视频| 欧洲av一区二区嗯嗯嗯啊| 一区二区三区四区视频精品免费 | 激情成人午夜视频| 欧美大片在线观看一区| 久久99精品国产麻豆婷婷| 日韩一区二区中文字幕| 久久不见久久见中文字幕免费| 日韩精品一区二区三区在线播放| 久久精品99国产国产精| 精品久久久久香蕉网| 国产精品一区二区x88av| 国产欧美日韩视频一区二区| av网站一区二区三区| 综合久久久久久| 欧美性色黄大片| 免费视频一区二区| 久久免费电影网| 成人app下载| 一区二区三区视频在线看| 欧美日免费三级在线| 免费在线看一区| 久久久久久免费| 91在线观看免费视频| 亚洲一区二区三区免费视频| 91.xcao| 国产一区在线精品| 一区二区中文视频| 欧美在线制服丝袜| 麻豆精品一二三| 国产日产亚洲精品系列| 一本色道久久综合精品竹菊| 亚洲一二三区不卡| 欧美电视剧在线观看完整版| 成人激情动漫在线观看| 亚洲国产美女搞黄色| 精品国产91亚洲一区二区三区婷婷| 成人高清免费在线播放| 亚洲国产另类精品专区| 久久毛片高清国产| 欧美专区在线观看一区| 久久av老司机精品网站导航| 国产精品久久久久久亚洲毛片 | 精品动漫一区二区三区在线观看| www.66久久| 日本va欧美va瓶| 国产精品不卡一区| 欧美一区二视频| 91色婷婷久久久久合中文| 免费观看一级特黄欧美大片| 国产精品免费看片| 777欧美精品| 成人av网在线| 久久99精品一区二区三区| 亚洲天堂精品视频| 久久五月婷婷丁香社区| 欧美日韩一区中文字幕| 成人性视频免费网站| 日本视频中文字幕一区二区三区| 中文字幕乱码久久午夜不卡 | 精品成人一区二区| 欧美视频中文字幕| 丁香婷婷综合色啪| 日本不卡123| 一区二区三区四区乱视频| 国产日本欧美一区二区| 欧美麻豆精品久久久久久| 99国产精品久久| 国产高清在线精品| 免费在线成人网| 亚洲福利电影网| 亚洲欧美精品午睡沙发| 国产欧美一区视频| 精品国产sm最大网站| 欧美日韩精品一区二区| 成人短视频下载| 国产精品一区在线观看乱码| 日本大胆欧美人术艺术动态 | www.成人在线| 国产毛片精品视频| 日本欧美大码aⅴ在线播放| 一区二区三区免费网站| 中文字幕在线不卡一区二区三区 | 亚洲不卡在线观看| 亚洲人123区| 1区2区3区国产精品| 中文在线免费一区三区高中清不卡 | 成人激情黄色小说| 精品亚洲欧美一区| 奇米色一区二区| 视频精品一区二区| 亚洲电影在线播放| 综合激情成人伊人| 中文字幕在线视频一区| 久久久久久电影| 国产午夜亚洲精品理论片色戒 | 免费成人在线播放| 天天色天天操综合|