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

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

?? zz_pex.cpp

?? 一個比較通用的大數運算庫
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
   for (i = 0; i <= da; i++)
      mul(xp[i], ap[i], t);

   x.normalize();
}


void mul(ZZ_pEX& x, const ZZ_pEX& a, long b)
{
   NTL_ZZ_pRegister(t);
   t = b;
   mul(x, a, t);
}

void sqr(ZZ_pEX& c, const ZZ_pEX& a)
{
   if (IsZero(a)) {
      clear(c);
      return;
   }

   if (deg(a) == 0) {
      ZZ_pE res;
      sqr(res, ConstTerm(a));
      conv(c, res);
      return;
   } 

   // general case...Kronecker subst

   ZZ_pX A, C;

   long da = deg(a);

   long n = ZZ_pE::degree();
   long n2 = 2*n-1;

   if (NTL_OVERFLOW(2*da+1, n2, 0))
      Error("overflow in ZZ_pEX sqr");

   long i, j;

   A.rep.SetLength((da+1)*n2);

   for (i = 0; i <= da; i++) {
      const ZZ_pX& coeff = rep(a.rep[i]);
      long dcoeff = deg(coeff);
      for (j = 0; j <= dcoeff; j++)
         A.rep[n2*i + j] = coeff.rep[j]; 
   }

   A.normalize();

   sqr(C, A);

   long Clen = C.rep.length();
   long lc = (Clen + n2 - 1)/n2;
   long dc = lc - 1;

   c.rep.SetLength(dc+1);

   ZZ_pX tmp;
   
   for (i = 0; i <= dc; i++) {
      tmp.rep.SetLength(n2);
      for (j = 0; j < n2 && n2*i + j < Clen; j++)
         tmp.rep[j] = C.rep[n2*i + j];
      for (; j < n2; j++)
         clear(tmp.rep[j]);
      tmp.normalize();
      conv(c.rep[i], tmp);
   }
  
  
   c.normalize();
}


void MulTrunc(ZZ_pEX& x, const ZZ_pEX& a, const ZZ_pEX& b, long n)
{
   if (n < 0) Error("MulTrunc: bad args");

   ZZ_pEX t;
   mul(t, a, b);
   trunc(x, t, n);
}

void SqrTrunc(ZZ_pEX& x, const ZZ_pEX& a, long n)
{
   if (n < 0) Error("SqrTrunc: bad args");

   ZZ_pEX t;
   sqr(t, a);
   trunc(x, t, n);
}


void CopyReverse(ZZ_pEX& x, const ZZ_pEX& a, long hi)

   // x[0..hi] = reverse(a[0..hi]), with zero fill
   // input may not alias output

{
   long i, j, n, m;

   n = hi+1;
   m = a.rep.length();

   x.rep.SetLength(n);

   const ZZ_pE* ap = a.rep.elts();
   ZZ_pE* xp = x.rep.elts();

   for (i = 0; i < n; i++) {
      j = hi-i;
      if (j < 0 || j >= m)
         clear(xp[i]);
      else
         xp[i] = ap[j];
   }

   x.normalize();
} 


void trunc(ZZ_pEX& x, const ZZ_pEX& a, long m)

// x = a % X^m, output may alias input 

{
   if (m < 0) Error("trunc: bad args");

   if (&x == &a) {
      if (x.rep.length() > m) {
         x.rep.SetLength(m);
         x.normalize();
      }
   }
   else {
      long n;
      long i;
      ZZ_pE* xp;
      const ZZ_pE* ap;

      n = min(a.rep.length(), m);
      x.rep.SetLength(n);

      xp = x.rep.elts();
      ap = a.rep.elts();

      for (i = 0; i < n; i++) xp[i] = ap[i];

      x.normalize();
   }
}


void random(ZZ_pEX& x, long n)
{
   long i;

   x.rep.SetLength(n);

   for (i = 0; i < n; i++)
      random(x.rep[i]);

   x.normalize();
}

void negate(ZZ_pEX& x, const ZZ_pEX& a)
{
   long n = a.rep.length();
   x.rep.SetLength(n);

   const ZZ_pE* ap = a.rep.elts();
   ZZ_pE* xp = x.rep.elts();
   long i;

   for (i = n; i; i--, ap++, xp++)
      negate((*xp), (*ap));
}



static
void MulByXModAux(ZZ_pEX& h, const ZZ_pEX& a, const ZZ_pEX& f)
{
   long i, n, m;
   ZZ_pE* hh;
   const ZZ_pE *aa, *ff;

   ZZ_pE t, z;

   n = deg(f);
   m = deg(a);

   if (m >= n || n == 0) Error("MulByXMod: bad args");

   if (m < 0) {
      clear(h);
      return;
   }

   if (m < n-1) {
      h.rep.SetLength(m+2);
      hh = h.rep.elts();
      aa = a.rep.elts();
      for (i = m+1; i >= 1; i--)
         hh[i] = aa[i-1];
      clear(hh[0]);
   }
   else {
      h.rep.SetLength(n);
      hh = h.rep.elts();
      aa = a.rep.elts();
      ff = f.rep.elts();
      negate(z, aa[n-1]);
      if (!IsOne(ff[n]))
         div(z, z, ff[n]);
      for (i = n-1; i >= 1; i--) {
         mul(t, z, ff[i]);
         add(hh[i], aa[i-1], t);
      }
      mul(hh[0], z, ff[0]);
      h.normalize();
   }
}

void MulByXMod(ZZ_pEX& h, const ZZ_pEX& a, const ZZ_pEX& f)
{
   if (&h == &f) {
      ZZ_pEX hh;
      MulByXModAux(hh, a, f);
      h = hh;
   }
   else
      MulByXModAux(h, a, f);
}



void PlainMul(ZZ_pEX& x, const ZZ_pEX& a, const ZZ_pEX& b)
{
   long da = deg(a);
   long db = deg(b);

   if (da < 0 || db < 0) {
      clear(x);
      return;
   }

   long d = da+db;



   const ZZ_pE *ap, *bp;
   ZZ_pE *xp;
   
   ZZ_pEX la, lb;

   if (&x == &a) {
      la = a;
      ap = la.rep.elts();
   }
   else
      ap = a.rep.elts();

   if (&x == &b) {
      lb = b;
      bp = lb.rep.elts();
   }
   else
      bp = b.rep.elts();

   x.rep.SetLength(d+1);

   xp = x.rep.elts();

   long i, j, jmin, jmax;
   static ZZ_pX t, accum;

   for (i = 0; i <= d; i++) {
      jmin = max(0, i-db);
      jmax = min(da, i);
      clear(accum);
      for (j = jmin; j <= jmax; j++) {
	 mul(t, rep(ap[j]), rep(bp[i-j]));
	 add(accum, accum, t);
      }
      conv(xp[i], accum);
   }
   x.normalize();
}

void SetSize(vec_ZZ_pX& x, long n, long m)
{
   x.SetLength(n);
   long i;
   for (i = 0; i < n; i++)
      x[i].rep.SetMaxLength(m);
}



void PlainDivRem(ZZ_pEX& q, ZZ_pEX& r, const ZZ_pEX& a, const ZZ_pEX& b)
{
   long da, db, dq, i, j, LCIsOne;
   const ZZ_pE *bp;
   ZZ_pE *qp;
   ZZ_pX *xp;


   ZZ_pE LCInv, t;
   ZZ_pX s;

   da = deg(a);
   db = deg(b);

   if (db < 0) Error("ZZ_pEX: division by zero");

   if (da < db) {
      r = a;
      clear(q);
      return;
   }

   ZZ_pEX lb;

   if (&q == &b) {
      lb = b;
      bp = lb.rep.elts();
   }
   else
      bp = b.rep.elts();

   if (IsOne(bp[db]))
      LCIsOne = 1;
   else {
      LCIsOne = 0;
      inv(LCInv, bp[db]);
   }

   vec_ZZ_pX x;

   SetSize(x, da+1, 2*ZZ_pE::degree());

   for (i = 0; i <= da; i++) 
      x[i] = rep(a.rep[i]);

   xp = x.elts();

   dq = da - db;
   q.rep.SetLength(dq+1);
   qp = q.rep.elts();

   for (i = dq; i >= 0; i--) {
      conv(t, xp[i+db]);
      if (!LCIsOne)
	 mul(t, t, LCInv);
      qp[i] = t;
      negate(t, t);

      for (j = db-1; j >= 0; j--) {
	 mul(s, rep(t), rep(bp[j]));
	 add(xp[i+j], xp[i+j], s);
      }
   }

   r.rep.SetLength(db);
   for (i = 0; i < db; i++)
      conv(r.rep[i], xp[i]);
   r.normalize();
}


void PlainRem(ZZ_pEX& r, const ZZ_pEX& a, const ZZ_pEX& b, vec_ZZ_pX& x)
{
   long da, db, dq, i, j, LCIsOne;
   const ZZ_pE *bp;
   ZZ_pX *xp;


   ZZ_pE LCInv, t;
   ZZ_pX s;

   da = deg(a);
   db = deg(b);

   if (db < 0) Error("ZZ_pEX: division by zero");

   if (da < db) {
      r = a;
      return;
   }

   bp = b.rep.elts();

   if (IsOne(bp[db]))
      LCIsOne = 1;
   else {
      LCIsOne = 0;
      inv(LCInv, bp[db]);
   }

   for (i = 0; i <= da; i++)
      x[i] = rep(a.rep[i]);

   xp = x.elts();

   dq = da - db;

   for (i = dq; i >= 0; i--) {
      conv(t, xp[i+db]);
      if (!LCIsOne)
	 mul(t, t, LCInv);
      negate(t, t);

      for (j = db-1; j >= 0; j--) {
	 mul(s, rep(t), rep(bp[j]));
	 add(xp[i+j], xp[i+j], s);
      }
   }

   r.rep.SetLength(db);
   for (i = 0; i < db; i++)
      conv(r.rep[i], xp[i]);
   r.normalize();
}


void PlainDivRem(ZZ_pEX& q, ZZ_pEX& r, const ZZ_pEX& a, const ZZ_pEX& b, 
     vec_ZZ_pX& x)
{
   long da, db, dq, i, j, LCIsOne;
   const ZZ_pE *bp;
   ZZ_pE *qp;
   ZZ_pX *xp;


   ZZ_pE LCInv, t;
   ZZ_pX s;

   da = deg(a);
   db = deg(b);

   if (db < 0) Error("ZZ_pEX: division by zero");

   if (da < db) {
      r = a;
      clear(q);
      return;
   }

   ZZ_pEX lb;

   if (&q == &b) {
      lb = b;
      bp = lb.rep.elts();
   }
   else
      bp = b.rep.elts();

   if (IsOne(bp[db]))
      LCIsOne = 1;
   else {
      LCIsOne = 0;
      inv(LCInv, bp[db]);
   }

   for (i = 0; i <= da; i++)
      x[i] = rep(a.rep[i]);

   xp = x.elts();

   dq = da - db;
   q.rep.SetLength(dq+1);
   qp = q.rep.elts();

   for (i = dq; i >= 0; i--) {
      conv(t, xp[i+db]);
      if (!LCIsOne)
	 mul(t, t, LCInv);
      qp[i] = t;
      negate(t, t);

      for (j = db-1; j >= 0; j--) {
	 mul(s, rep(t), rep(bp[j]));
	 add(xp[i+j], xp[i+j], s);
      }
   }

   r.rep.SetLength(db);
   for (i = 0; i < db; i++)
      conv(r.rep[i], xp[i]);
   r.normalize();
}


void PlainDiv(ZZ_pEX& q, const ZZ_pEX& a, const ZZ_pEX& b)
{
   long da, db, dq, i, j, LCIsOne;
   const ZZ_pE *bp;
   ZZ_pE *qp;
   ZZ_pX *xp;


   ZZ_pE LCInv, t;
   ZZ_pX s;

   da = deg(a);
   db = deg(b);

   if (db < 0) Error("ZZ_pEX: division by zero");

   if (da < db) {
      clear(q);
      return;
   }

   ZZ_pEX lb;

   if (&q == &b) {
      lb = b;
      bp = lb.rep.elts();
   }
   else
      bp = b.rep.elts();

   if (IsOne(bp[db]))
      LCIsOne = 1;
   else {
      LCIsOne = 0;
      inv(LCInv, bp[db]);
   }

   vec_ZZ_pX x;
   SetSize(x, da+1-db, 2*ZZ_pE::degree());

   for (i = db; i <= da; i++)
      x[i-db] = rep(a.rep[i]);

   xp = x.elts();

   dq = da - db;
   q.rep.SetLength(dq+1);
   qp = q.rep.elts();

   for (i = dq; i >= 0; i--) {
      conv(t, xp[i]);
      if (!LCIsOne)
	 mul(t, t, LCInv);
      qp[i] = t;
      negate(t, t);

      long lastj = max(0, db-i);

      for (j = db-1; j >= lastj; j--) {
	 mul(s, rep(t), rep(bp[j]));
	 add(xp[i+j-db], xp[i+j-db], s);
      }
   }
}

void PlainRem(ZZ_pEX& r, const ZZ_pEX& a, const ZZ_pEX& b)
{
   long da, db, dq, i, j, LCIsOne;
   const ZZ_pE *bp;
   ZZ_pX *xp;


   ZZ_pE LCInv, t;
   ZZ_pX s;

   da = deg(a);
   db = deg(b);

   if (db < 0) Error("ZZ_pEX: division by zero");

   if (da < db) {
      r = a;
      return;
   }

   bp = b.rep.elts();

   if (IsOne(bp[db]))
      LCIsOne = 1;
   else {
      LCIsOne = 0;
      inv(LCInv, bp[db]);
   }

   vec_ZZ_pX x;
   SetSize(x, da + 1, 2*ZZ_pE::degree());

   for (i = 0; i <= da; i++)
      x[i] = rep(a.rep[i]);

   xp = x.elts();

   dq = da - db;

   for (i = dq; i >= 0; i--) {
      conv(t, xp[i+db]);
      if (!LCIsOne)
	 mul(t, t, LCInv);
      negate(t, t);

      for (j = db-1; j >= 0; j--) {
	 mul(s, rep(t), rep(bp[j]));
	 add(xp[i+j], xp[i+j], s);
      }
   }

   r.rep.SetLength(db);
   for (i = 0; i < db; i++)
      conv(r.rep[i], xp[i]);
   r.normalize();
}



void RightShift(ZZ_pEX& x, const ZZ_pEX& a, long n)
{
   if (IsZero(a)) {
      clear(x);
      return;
   }

   if (n < 0) {
      if (n < -NTL_MAX_LONG) Error("overflow in RightShift");
      LeftShift(x, a, -n);
      return;
   }

   long da = deg(a);
   long i;
 
   if (da < n) {
      clear(x);
      return;
   }

   if (&x != &a)
      x.rep.SetLength(da-n+1);

   for (i = 0; i <= da-n; i++)
      x.rep[i] = a.rep[i+n];

   if (&x == &a)
      x.rep.SetLength(da-n+1);

   x.normalize();
}

void LeftShift(ZZ_pEX& x, const ZZ_pEX& a, long n)
{
   if (IsZero(a)) {
      clear(x);
      return;
   }

   if (n < 0) {
      if (n < -NTL_MAX_LONG) 
         clear(x);
      else
         RightShift(x, a, -n);
      return;
   }

   if (NTL_OVERFLOW(n, 1, 0))
      Error("overflow in LeftShift");

   long m = a.rep.length();

   x.rep.SetLength(m+n);

   long i;
   for (i = m-1; i >= 0; i--)
      x.rep[i+n] = a.rep[i];

   for (i = 0; i < n; i++)
      clear(x.rep[i]);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
美女在线一区二区| 国产欧美精品一区二区色综合| 91在线国产观看| 欧美日本精品一区二区三区| 精品国产成人在线影院| 玉米视频成人免费看| 久久精品72免费观看| 色国产综合视频| 91精品国产一区二区三区 | 欧美精品一区二区三区在线播放| 日韩高清一区二区| 另类专区欧美蜜桃臀第一页| 北岛玲一区二区三区四区| 久久久www成人免费无遮挡大片| 亚洲精品亚洲人成人网在线播放| 免费精品视频最新在线| 日韩一区二区麻豆国产| 最新国产精品久久精品| 久久精品国产精品亚洲综合| 91在线视频播放地址| 亚洲国产精品二十页| 精品一区二区三区的国产在线播放| 91碰在线视频| 一区在线观看免费| 国产高清成人在线| 久久夜色精品国产欧美乱极品| 日本一不卡视频| 欧美日韩一区视频| 亚洲免费观看高清| 99久久亚洲一区二区三区青草 | 国产成人免费视频精品含羞草妖精| 在线播放中文一区| 亚洲国产aⅴ天堂久久| 97精品国产露脸对白| 中文字幕一区日韩精品欧美| 成人小视频在线观看| 欧美韩国日本一区| 波多野结衣91| 亚洲免费av高清| 欧美三级视频在线| 婷婷开心激情综合| 日韩视频免费观看高清在线视频| 亚洲.国产.中文慕字在线| 欧美日韩一区久久| 精品亚洲aⅴ乱码一区二区三区| 欧美videos大乳护士334| 美女看a上一区| 久久久久久久久久久99999| 国产一区二区在线看| 欧美国产乱子伦| 不卡av在线免费观看| 艳妇臀荡乳欲伦亚洲一区| 欧美性色黄大片| 日韩成人免费电影| 国产亚洲视频系列| 色综合久久久久综合99| 同产精品九九九| 欧美精品一区二区三区久久久| 国产一级精品在线| 成人免费小视频| 欧美精品一卡两卡| 国产成人精品亚洲日本在线桃色| 国产精品久久久久精k8| 欧美午夜在线一二页| 免费成人美女在线观看| 亚洲国产精品精华液2区45| 91免费视频网| 美女一区二区三区| 国产精品电影院| 在线播放/欧美激情| 国产成人在线视频免费播放| 综合色中文字幕| 日韩写真欧美这视频| 成人白浆超碰人人人人| 午夜激情一区二区三区| 久久精品欧美日韩| 欧美艳星brazzers| 国产精品99久久久久久有的能看| 亚洲精品国产一区二区精华液 | 日韩视频免费观看高清在线视频| 成人性生交大片免费看在线播放| 亚洲国产aⅴ成人精品无吗| 久久久久国产精品人| 欧美日韩第一区日日骚| 成人av电影免费在线播放| 免费成人在线播放| 亚洲一区二区三区四区五区中文 | av日韩在线网站| 精品综合久久久久久8888| 亚洲综合久久久久| 中文一区二区完整视频在线观看| 欧美喷潮久久久xxxxx| 99久久er热在这里只有精品15| 麻豆精品新av中文字幕| 一区二区三区在线观看视频| 久久九九全国免费| 日韩欧美国产三级| 欧美日韩国产影片| 91久久香蕉国产日韩欧美9色| 国产精品一级二级三级| 久久国产精品72免费观看| 天堂久久一区二区三区| 亚洲欧美国产77777| 国产三级久久久| 精品嫩草影院久久| 91精品免费在线| 欧美日韩成人综合天天影院| 91啦中文在线观看| 91碰在线视频| 91在线你懂得| av综合在线播放| av电影在线观看一区| 成人精品视频网站| 不卡视频一二三四| 99精品国产热久久91蜜凸| 成人av一区二区三区| 粉嫩aⅴ一区二区三区四区| 国产成a人无v码亚洲福利| 国产999精品久久| 久久99久久99精品免视看婷婷| 秋霞午夜鲁丝一区二区老狼| 一区二区激情视频| 亚洲国产精品久久一线不卡| 亚洲黄色av一区| 亚洲一区在线视频| 午夜天堂影视香蕉久久| 日本aⅴ精品一区二区三区 | 91精品综合久久久久久| 91精品欧美综合在线观看最新| 日韩午夜电影在线观看| 日韩三级免费观看| 精品剧情在线观看| 国产欧美一区二区三区沐欲| 欧美国产欧美综合| 一区二区三区视频在线看| 亚洲国产cao| 久久99国产精品免费网站| 国产精品1024| 在线亚洲免费视频| 日韩亚洲欧美高清| 国产精品青草综合久久久久99| 亚洲丝袜自拍清纯另类| 亚洲二区视频在线| 久久国产精品72免费观看| 成人动漫一区二区| 欧美日韩亚洲综合在线| 日韩精品一区二区三区中文精品| 久久久午夜电影| 亚洲综合久久久| 国产精品综合视频| 91麻豆精东视频| 精品99999| 亚洲蜜臀av乱码久久精品蜜桃| 日本女优在线视频一区二区| 国产剧情在线观看一区二区| 91视频国产资源| 日韩免费电影网站| 最近中文字幕一区二区三区| 日韩黄色小视频| 懂色av噜噜一区二区三区av| 精品视频全国免费看| 国产午夜精品久久久久久免费视| 一区二区三区日韩欧美| 另类小说色综合网站| 色婷婷一区二区| 久久综合色天天久久综合图片| 国产精品视频一二三| 蜜桃av噜噜一区二区三区小说| av中文字幕一区| 亚洲精品一区二区三区精华液| 亚洲精品写真福利| 国产成人av资源| 欧美成人性福生活免费看| 一区在线观看免费| 国产99一区视频免费| 91精品一区二区三区久久久久久| 国产精品久久久久久久岛一牛影视 | 欧美日韩国产美女| 中文字幕国产精品一区二区| 秋霞电影一区二区| 欧美精品乱码久久久久久| 国产精品久久久久久久久免费相片| 日韩1区2区3区| 欧美日韩的一区二区| 一区二区三区在线免费播放| www.欧美日韩| 国产日韩精品一区二区浪潮av| 日韩精品一级中文字幕精品视频免费观看| heyzo一本久久综合| 国产日产亚洲精品系列| 国内不卡的二区三区中文字幕| 欧美精品色综合| 夜夜爽夜夜爽精品视频| 91一区二区在线| 最新久久zyz资源站| caoporen国产精品视频| 国产精品毛片久久久久久| 国产精品一区二区在线看| 日韩欧美激情四射| 另类小说综合欧美亚洲|