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

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

?? zz_pex.cpp

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



#include <NTL/ZZ_pEX.h>
#include <NTL/vec_vec_ZZ_p.h>

#include <NTL/new.h>

NTL_START_IMPL


const ZZ_pEX& ZZ_pEX::zero()
{
   static ZZ_pEX z;
   return z;
}


istream& operator>>(istream& s, ZZ_pEX& x)
{
   s >> x.rep;
   x.normalize();
   return s;
}

ostream& operator<<(ostream& s, const ZZ_pEX& a)
{
   return s << a.rep;
}


void ZZ_pEX::normalize()
{
   long n;
   const ZZ_pE* p;

   n = rep.length();
   if (n == 0) return;
   p = rep.elts() + n;
   while (n > 0 && IsZero(*--p)) {
      n--;
   }
   rep.SetLength(n);
}


long IsZero(const ZZ_pEX& a)
{
   return a.rep.length() == 0;
}


long IsOne(const ZZ_pEX& a)
{
    return a.rep.length() == 1 && IsOne(a.rep[0]);
}

long operator==(const ZZ_pEX& a, long b)
{
   if (b == 0)
      return IsZero(a);

   if (b == 1)
      return IsOne(a);

   long da = deg(a);

   if (da > 0) return 0;

   NTL_ZZ_pRegister(bb);
   bb = b;

   if (da < 0)
      return IsZero(bb);

   return a.rep[0] == bb;
}

long operator==(const ZZ_pEX& a, const ZZ_p& b)
{
   if (IsZero(b))
      return IsZero(a);

   long da = deg(a);

   if (da != 0)
      return 0;

   return a.rep[0] == b;
}

long operator==(const ZZ_pEX& a, const ZZ_pE& b)
{
   if (IsZero(b))
      return IsZero(a);

   long da = deg(a);

   if (da != 0)
      return 0;

   return a.rep[0] == b;
}




void SetCoeff(ZZ_pEX& x, long i, const ZZ_pE& a)
{
   long j, m;

   if (i < 0) 
      Error("SetCoeff: negative index");

   if (NTL_OVERFLOW(i, 1, 0))
      Error("overflow in SetCoeff");

   m = deg(x);

   if (i > m) {
      /* careful: a may alias a coefficient of x */

      long alloc = x.rep.allocated();

      if (alloc > 0 && i >= alloc) {
         ZZ_pE aa = a;
         x.rep.SetLength(i+1);
         x.rep[i] = aa;
      }
      else {
         x.rep.SetLength(i+1);
         x.rep[i] = a;
      }

      for (j = m+1; j < i; j++)
         clear(x.rep[j]);
   }
   else
      x.rep[i] = a;

   x.normalize();
}

void SetCoeff(ZZ_pEX& x, long i, const ZZ_p& aa)
{
   long j, m;

   if (i < 0)
      Error("SetCoeff: negative index");

   if (NTL_OVERFLOW(i, 1, 0))
      Error("overflow in SetCoeff");

   NTL_ZZ_pRegister(a);  // watch out for aliases!
   a = aa;

   m = deg(x);

   if (i > m) {
      x.rep.SetLength(i+1);
      for (j = m+1; j < i; j++)
         clear(x.rep[j]);
   }
   x.rep[i] = a;
   x.normalize();
}

void SetCoeff(ZZ_pEX& x, long i, long a)
{
   if (a == 1)
      SetCoeff(x, i);
   else {
      NTL_ZZ_pRegister(T);
      T = a;
      SetCoeff(x, i, T);
   }
}



void SetCoeff(ZZ_pEX& x, long i)
{
   long j, m;

   if (i < 0) 
      Error("coefficient index out of range");

   if (NTL_OVERFLOW(i, 1, 0))
      Error("overflow in SetCoeff");

   m = deg(x);

   if (i > m) {
      x.rep.SetLength(i+1);
      for (j = m+1; j < i; j++)
         clear(x.rep[j]);
   }
   set(x.rep[i]);
   x.normalize();
}


void SetX(ZZ_pEX& x)
{
   clear(x);
   SetCoeff(x, 1);
}


long IsX(const ZZ_pEX& a)
{
   return deg(a) == 1 && IsOne(LeadCoeff(a)) && IsZero(ConstTerm(a));
}
      
      

const ZZ_pE& coeff(const ZZ_pEX& a, long i)
{
   if (i < 0 || i > deg(a))
      return ZZ_pE::zero();
   else
      return a.rep[i];
}


const ZZ_pE& LeadCoeff(const ZZ_pEX& a)
{
   if (IsZero(a))
      return ZZ_pE::zero();
   else
      return a.rep[deg(a)];
}

const ZZ_pE& ConstTerm(const ZZ_pEX& a)
{
   if (IsZero(a))
      return ZZ_pE::zero();
   else
      return a.rep[0];
}



void conv(ZZ_pEX& x, const ZZ_pE& a)
{
   if (IsZero(a))
      x.rep.SetLength(0);
   else {
      x.rep.SetLength(1);
      x.rep[0] = a;
   }
}

void conv(ZZ_pEX& x, long a)
{
   if (a == 0) 
      clear(x);
   else if (a == 1)
      set(x);
   else {
      NTL_ZZ_pRegister(T);
      T = a;
      conv(x, T);
   }
}

void conv(ZZ_pEX& x, const ZZ& a)
{
   NTL_ZZ_pRegister(T);
   conv(T, a);
   conv(x, T);
}

void conv(ZZ_pEX& x, const ZZ_p& a)
{
   if (IsZero(a)) 
      clear(x);
   else if (IsOne(a))
      set(x);
   else {
      x.rep.SetLength(1);
      conv(x.rep[0], a);
      x.normalize();
   }
}

void conv(ZZ_pEX& x, const ZZ_pX& aa)
{
   ZZ_pX a = aa; // in case a aliases the rep of a coefficient of x

   long n = deg(a)+1;
   long i;

   x.rep.SetLength(n);
   for (i = 0; i < n; i++)
      conv(x.rep[i], coeff(a, i));
}


void conv(ZZ_pEX& x, const vec_ZZ_pE& a)
{
   x.rep = a;
   x.normalize();
}


void add(ZZ_pEX& x, const ZZ_pEX& a, const ZZ_pEX& b)
{
   long da = deg(a);
   long db = deg(b);
   long minab = min(da, db);
   long maxab = max(da, db);
   x.rep.SetLength(maxab+1);

   long i;
   const ZZ_pE *ap, *bp; 
   ZZ_pE* xp;

   for (i = minab+1, ap = a.rep.elts(), bp = b.rep.elts(), xp = x.rep.elts();
        i; i--, ap++, bp++, xp++)
      add(*xp, (*ap), (*bp));

   if (da > minab && &x != &a)
      for (i = da-minab; i; i--, xp++, ap++)
         *xp = *ap;
   else if (db > minab && &x != &b)
      for (i = db-minab; i; i--, xp++, bp++)
         *xp = *bp;
   else
      x.normalize();
}


void add(ZZ_pEX& x, const ZZ_pEX& a, const ZZ_pE& b)
{
   long n = a.rep.length();
   if (n == 0) {
      conv(x, b);
   }
   else if (&x == &a) {
      add(x.rep[0], a.rep[0], b);
      x.normalize();
   }
   else if (x.rep.MaxLength() == 0) {
      x = a;
      add(x.rep[0], a.rep[0], b);
      x.normalize();
   }
   else {
      // ugly...b could alias a coeff of x

      ZZ_pE *xp = x.rep.elts();
      add(xp[0], a.rep[0], b);
      x.rep.SetLength(n);
      xp = x.rep.elts();
      const ZZ_pE *ap = a.rep.elts();
      long i;
      for (i = 1; i < n; i++)
         xp[i] = ap[i];
      x.normalize();
   }
}

void add(ZZ_pEX& x, const ZZ_pEX& a, const ZZ_p& b)
{
   long n = a.rep.length();
   if (n == 0) {
      conv(x, b);
   }
   else if (&x == &a) {
      add(x.rep[0], a.rep[0], b);
      x.normalize();
   }
   else if (x.rep.MaxLength() == 0) {
      x = a;
      add(x.rep[0], a.rep[0], b);
      x.normalize();
   }
   else {
      // ugly...b could alias a coeff of x

      ZZ_pE *xp = x.rep.elts();
      add(xp[0], a.rep[0], b);
      x.rep.SetLength(n);
      xp = x.rep.elts();
      const ZZ_pE *ap = a.rep.elts();
      long i;
      for (i = 1; i < n; i++)
         xp[i] = ap[i];
      x.normalize();
   }
}


void add(ZZ_pEX& x, const ZZ_pEX& a, long b)
{
   if (a.rep.length() == 0) {
      conv(x, b);
   }
   else {
      if (&x != &a) x = a;
      add(x.rep[0], x.rep[0], b);
      x.normalize();
   }
}


void sub(ZZ_pEX& x, const ZZ_pEX& a, const ZZ_pEX& b)
{
   long da = deg(a);
   long db = deg(b);
   long minab = min(da, db);
   long maxab = max(da, db);
   x.rep.SetLength(maxab+1);

   long i;
   const ZZ_pE *ap, *bp; 
   ZZ_pE* xp;

   for (i = minab+1, ap = a.rep.elts(), bp = b.rep.elts(), xp = x.rep.elts();
        i; i--, ap++, bp++, xp++)
      sub(*xp, (*ap), (*bp));

   if (da > minab && &x != &a)
      for (i = da-minab; i; i--, xp++, ap++)
         *xp = *ap;
   else if (db > minab)
      for (i = db-minab; i; i--, xp++, bp++)
         negate(*xp, *bp);
   else
      x.normalize();
}


void sub(ZZ_pEX& x, const ZZ_pEX& a, const ZZ_pE& b)
{
   long n = a.rep.length();
   if (n == 0) {
      conv(x, b);
      negate(x, x);
   }
   else if (&x == &a) {
      sub(x.rep[0], a.rep[0], b);
      x.normalize();
   }
   else if (x.rep.MaxLength() == 0) {
      x = a;
      sub(x.rep[0], a.rep[0], b);
      x.normalize();
   }
   else {
      // ugly...b could alias a coeff of x

      ZZ_pE *xp = x.rep.elts();
      sub(xp[0], a.rep[0], b);
      x.rep.SetLength(n);
      xp = x.rep.elts();
      const ZZ_pE *ap = a.rep.elts();
      long i;
      for (i = 1; i < n; i++)
         xp[i] = ap[i];
      x.normalize();
   }
}

void sub(ZZ_pEX& x, const ZZ_pEX& a, const ZZ_p& b)
{
   long n = a.rep.length();
   if (n == 0) {
      conv(x, b);
      negate(x, x);
   }
   else if (&x == &a) {
      sub(x.rep[0], a.rep[0], b);
      x.normalize();
   }
   else if (x.rep.MaxLength() == 0) {
      x = a;
      sub(x.rep[0], a.rep[0], b);
      x.normalize();
   }
   else {
      // ugly...b could alias a coeff of x

      ZZ_pE *xp = x.rep.elts();
      sub(xp[0], a.rep[0], b);
      x.rep.SetLength(n);
      xp = x.rep.elts();
      const ZZ_pE *ap = a.rep.elts();
      long i;
      for (i = 1; i < n; i++)
         xp[i] = ap[i];
      x.normalize();
   }
}


void sub(ZZ_pEX& x, const ZZ_pEX& a, long b)
{
   if (a.rep.length() == 0) {
      conv(x, b);
      negate(x, x);
   }
   else {
      if (&x != &a) x = a;
      sub(x.rep[0], x.rep[0], b);
      x.normalize();
   }
}

void sub(ZZ_pEX& x, const ZZ_pE& b, const ZZ_pEX& a)
{
   long n = a.rep.length();
   if (n == 0) {
      conv(x, b);
   }
   else if (x.rep.MaxLength() == 0) {
      negate(x, a);
      add(x.rep[0], x.rep[0], b);
      x.normalize();
   }
   else {
      // ugly...b could alias a coeff of x

      ZZ_pE *xp = x.rep.elts();
      sub(xp[0], b, a.rep[0]);
      x.rep.SetLength(n);
      xp = x.rep.elts();
      const ZZ_pE *ap = a.rep.elts();
      long i;
      for (i = 1; i < n; i++)
         negate(xp[i], ap[i]);
      x.normalize();
   }
}


void sub(ZZ_pEX& x, const ZZ_p& a, const ZZ_pEX& b)
{
   NTL_ZZ_pRegister(T);   // avoids aliasing problems
   T = a;
   negate(x, b);
   add(x, x, T);
}

void sub(ZZ_pEX& x, long a, const ZZ_pEX& b)
{
   NTL_ZZ_pRegister(T); 
   T = a;
   negate(x, b);
   add(x, x, T);
}

void mul(ZZ_pEX& c, const ZZ_pEX& a, const ZZ_pEX& b)
{
   if (&a == &b) {
      sqr(c, a);
      return;
   }

   if (IsZero(a) || IsZero(b)) {
      clear(c);
      return;
   }

   if (deg(a) == 0) {
      mul(c, b, ConstTerm(a));
      return;
   } 

   if (deg(b) == 0) {
      mul(c, a, ConstTerm(b));
      return;
   }

   // general case...Kronecker subst

   ZZ_pX A, B, C;

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

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

   if (NTL_OVERFLOW(da+db+1, n2, 0))
      Error("overflow in ZZ_pEX mul");

   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();

   B.rep.SetLength((db+1)*n2);

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

   B.normalize();

   mul(C, A, B);

   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 mul(ZZ_pEX& x, const ZZ_pEX& a, const ZZ_pE& b)
{
   if (IsZero(b)) {
      clear(x);
      return;
   }

   ZZ_pE t;
   t = b;

   long i, da;

   const ZZ_pE *ap;
   ZZ_pE* xp;

   da = deg(a);
   x.rep.SetLength(da+1);
   ap = a.rep.elts();
   xp = x.rep.elts();

   for (i = 0; i <= da; i++)
      mul(xp[i], ap[i], t);

   x.normalize();
}



void mul(ZZ_pEX& x, const ZZ_pEX& a, const ZZ_p& b)
{
   if (IsZero(b)) {
      clear(x);
      return;
   }

   NTL_ZZ_pRegister(t);
   t = b;

   long i, da;

   const ZZ_pE *ap;
   ZZ_pE* xp;

   da = deg(a);
   x.rep.SetLength(da+1);
   ap = a.rep.elts();
   xp = x.rep.elts();

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精品高清不卡| 欧美v国产在线一区二区三区| 蜜桃av一区二区三区电影| 亚洲综合小说图片| 久久免费美女视频| 色吊一区二区三区| 99精品国产一区二区三区不卡| 欧美精品色综合| 精品一区二区三区日韩| 久久99精品久久久久久动态图| 日韩一级大片在线| 2020日本不卡一区二区视频| 国产成人免费视频网站高清观看视频 | 久久亚洲综合av| 久久久国际精品| 亚洲黄色免费网站| 欧美日韩一区二区三区免费看| 亚洲成人精品在线观看| 91精品国产综合久久久久久| 久久精品国产精品亚洲综合| 国产日韩欧美激情| 色综合中文字幕国产 | 国产成人在线视频免费播放| 日韩一区二区三区免费看 | 国产精品123区| 欧美狂野另类xxxxoooo| 精品一二三四区| 中文字幕一区在线观看视频| 91久久一区二区| 久久精品国产澳门| 亚洲人成精品久久久久久| 91麻豆精品国产91| 不卡电影一区二区三区| 调教+趴+乳夹+国产+精品| 久久久美女艺术照精彩视频福利播放| 97精品久久久午夜一区二区三区| 午夜私人影院久久久久| 久久精品一区二区三区四区| 91搞黄在线观看| 国产乱理伦片在线观看夜一区| 亚洲欧美色一区| 欧美精品一区二区精品网| 一本色道久久综合亚洲aⅴ蜜桃| 中文字幕在线一区| 91丨九色丨蝌蚪富婆spa| 日韩二区三区在线观看| 国产精品丝袜91| 欧美一区二区三区色| 视频在线在亚洲| 99国产精品99久久久久久| 日韩精品一区二| 石原莉奈在线亚洲三区| 欧美二区在线观看| 美女看a上一区| 精品亚洲porn| 欧美在线视频日韩| 国产亚洲一区二区三区在线观看 | 另类综合日韩欧美亚洲| 精品一区二区三区免费视频| 亚洲精品国产高清久久伦理二区| 欧美精品免费视频| 蜜臀久久久99精品久久久久久| 91精品国产色综合久久| 欧美一卡2卡3卡4卡| 精品少妇一区二区三区免费观看 | 久久综合久久综合九色| 亚洲成av人片一区二区梦乃| 91精品国产综合久久久久久久| 日韩成人精品在线| 久久久久久久av麻豆果冻| 国产一区二区三区在线观看免费视频 | 欧美色倩网站大全免费| 综合色天天鬼久久鬼色| av在线这里只有精品| 亚洲人成7777| 日韩一级黄色大片| 成人丝袜18视频在线观看| 一级日本不卡的影视| 欧美大白屁股肥臀xxxxxx| 国产福利不卡视频| 亚洲国产精品成人久久综合一区 | 欧美日韩精品电影| 国产激情一区二区三区四区| 亚洲婷婷综合色高清在线| 久久99精品国产| 88在线观看91蜜桃国自产| 欧美精品一二三区| 欧美日韩国产影片| 欧美日韩三级视频| 色综合中文字幕国产 | 欧美激情艳妇裸体舞| 国产精品毛片高清在线完整版| 欧美一级日韩不卡播放免费| 国产成人鲁色资源国产91色综 | 国产一区二区免费视频| 91精品国产福利在线观看| 国产自产高清不卡| 国产成人av影院| 欧美精品久久99| 久久综合九色综合97婷婷| 久久综合九色综合欧美98 | 亚洲福利视频导航| 一个色妞综合视频在线观看| 91麻豆国产自产在线观看| 成人午夜免费电影| 成人av中文字幕| 99re成人精品视频| 欧美亚洲免费在线一区| 色综合婷婷久久| 欧美日韩的一区二区| 在线播放欧美女士性生活| 日韩欧美在线综合网| 久久蜜臀中文字幕| 亚洲欧美经典视频| 青娱乐精品在线视频| 日韩av高清在线观看| 黄页视频在线91| 成人国产视频在线观看| 92精品国产成人观看免费| 成人99免费视频| 91国偷自产一区二区开放时间| 日韩视频在线你懂得| 美女精品一区二区| 蜜臀av性久久久久蜜臀aⅴ四虎 | 国产亚洲一本大道中文在线| 91麻豆精品国产91久久久久久| 777欧美精品| 欧美日韩国产小视频在线观看| 午夜视频久久久久久| 这里只有精品免费| 黑人精品欧美一区二区蜜桃| 欧美色综合网站| 亚洲美女视频在线观看| 91浏览器在线视频| 美女在线一区二区| 国产精品美女久久福利网站| 国产精品18久久久久久vr| 欧美精品精品一区| 最新不卡av在线| 99在线视频精品| 夜夜嗨av一区二区三区中文字幕 | 色吊一区二区三区| 久久久精品免费观看| 成人晚上爱看视频| 久久女同互慰一区二区三区| 国产福利不卡视频| 中文字幕 久热精品 视频在线 | 久久久久久电影| 中文字幕的久久| av电影天堂一区二区在线| 欧美精品一区二区三区蜜桃视频 | 国产在线精品不卡| 六月婷婷色综合| gogo大胆日本视频一区| 国产精品福利一区二区三区| 国产一区二区91| 欧美激情艳妇裸体舞| 久久99精品一区二区三区| 欧美日韩国产成人在线91| 中文字幕日韩欧美一区二区三区| 99久久精品免费精品国产| 中文字幕一区二区三区视频| 欧美日韩国产精选| 国产精品综合在线视频| 国产精品久久久久久久蜜臀| 欧美亚洲国产一区在线观看网站| 一级日本不卡的影视| 综合分类小说区另类春色亚洲小说欧美| 色一情一伦一子一伦一区| 97国产一区二区| 欧美成人a∨高清免费观看| 日韩高清一级片| 亚洲欧美综合在线精品| 欧美日韩卡一卡二| 久久久91精品国产一区二区精品 | 午夜婷婷国产麻豆精品| 欧美另类变人与禽xxxxx| 韩国三级在线一区| 亚洲三级在线免费观看| 久久电影国产免费久久电影| 中文欧美字幕免费| 制服丝袜在线91| 成人免费视频视频在线观看免费 | 免费xxxx性欧美18vr| 国产成人啪免费观看软件| 久久久久久久久99精品| 久久99精品久久久久久久久久久久 | 亚洲综合丝袜美腿| 精品国产91久久久久久久妲己| 成人精品一区二区三区中文字幕 | 亚洲一区欧美一区| 日韩一区二区在线播放| 色综合激情五月| av电影在线观看一区| 国产一区二区久久| 狠狠狠色丁香婷婷综合激情| 香蕉成人伊视频在线观看| 久久精品亚洲麻豆av一区二区 | 亚洲精品欧美激情| 亚洲成人在线免费|