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

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

?? gf2x.cpp

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

#include <NTL/GF2X.h>
#include <NTL/vec_long.h>

#include <NTL/new.h>

NTL_START_IMPL

long GF2X::HexOutput = 0;


void GF2X::SetMaxLength(long n)
{
   if (n < 0) Error("GF2X::SetMaxLength: negative length");
   if (NTL_OVERFLOW(n, 1, 0))
      Error("GF2X::SetMaxLength: excessive length");
   long w = (n + NTL_BITS_PER_LONG - 1)/NTL_BITS_PER_LONG;
   xrep.SetMaxLength(w);
}

GF2X::GF2X(INIT_SIZE_TYPE, long n)
{
   SetMaxLength(n);
}



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

void GF2X::normalize()
{
   long n;
   const _ntl_ulong *p;

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

long IsZero(const GF2X& a) 
   { return a.xrep.length() == 0; }

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







long IsX(const GF2X& a)
{
   return a.xrep.length() == 1 && a.xrep[0] == 2;
}

GF2 coeff(const GF2X& a, long i)
{
   if (i < 0) return to_GF2(0);
   long wi = i/NTL_BITS_PER_LONG;
   if (wi >= a.xrep.length()) return to_GF2(0);
   long bi = i - wi*NTL_BITS_PER_LONG;

   return to_GF2((a.xrep[wi] & (1UL << bi)) != 0);
}

GF2 LeadCoeff(const GF2X& a)
{
   if (IsZero(a))
      return to_GF2(0);
   else
      return to_GF2(1);
}

GF2 ConstTerm(const GF2X& a)
{
   if (IsZero(a))
      return to_GF2(0);
   else
      return to_GF2((a.xrep[0] & 1) != 0);
}


void set(GF2X& x)
{
   x.xrep.SetLength(1);
   x.xrep[0] = 1;
}

void SetX(GF2X& x)
{
   x.xrep.SetLength(1);
   x.xrep[0] = 2;
}

void SetCoeff(GF2X& x, long i)
{
   if (i < 0) {
      Error("SetCoeff: negative index");
      return;
   }

   long n, j;

   n = x.xrep.length();
   long wi = i/NTL_BITS_PER_LONG;

   if (wi >= n) {
      x.xrep.SetLength(wi+1);
      for (j = n; j <= wi; j++)
         x.xrep[j] = 0;
   }

   long bi = i - wi*NTL_BITS_PER_LONG;

   x.xrep[wi] |= (1UL << bi);
}
   


void SetCoeff(GF2X& x, long i, long val)
{
   if (i < 0) {
      Error("SetCoeff: negative index");
      return;
   }

   val = val & 1;

   if (val) {
      SetCoeff(x, i);
      return;
   }

   // we want to clear position i

   long n;

   n = x.xrep.length();
   long wi = i/NTL_BITS_PER_LONG;

   if (wi >= n) 
      return;

   long bi = i - wi*NTL_BITS_PER_LONG;

   x.xrep[wi] &= ~(1UL << bi);
   if (wi == n-1) x.normalize();
}

void SetCoeff(GF2X& x, long i, GF2 a)
{
   SetCoeff(x, i, rep(a));
}


void swap(GF2X& a, GF2X& b)
{
   swap(a.xrep, b.xrep);
}



long deg(const GF2X& aa)
{
   long n = aa.xrep.length();

   if (n == 0)
      return -1;

   _ntl_ulong a = aa.xrep[n-1];
   long i = 0;

   if (a == 0) Error("GF2X: unnormalized polynomial detected in deg");

   while (a>=256)
      i += 8, a >>= 8;
   if (a >=16)
      i += 4, a >>= 4;
   if (a >= 4)
      i += 2, a >>= 2;
   if (a >= 2)
      i += 2;
   else if (a >= 1)
      i++;

   return NTL_BITS_PER_LONG*(n-1) + i - 1;
}
   

long operator==(const GF2X& a, const GF2X& b)
{
   return a.xrep == b.xrep;
}

long operator==(const GF2X& a, long b)
{
   if (b & 1) 
      return IsOne(a);
   else
      return IsZero(a);
}

long operator==(const GF2X& a, GF2 b)
{
   if (b == 1) 
      return IsOne(a);
   else
      return IsZero(a);
}

static
istream & HexInput(istream& s, GF2X& a)
{
   long n;
   long c;
   long i;
   long val;
   GF2X ibuf;

   n = 0;
   clear(ibuf);

   c = s.peek();
   val = CharToIntVal(c);
   while (val != -1) {
      for (i = 0; i < 4; i++)
         if (val & (1L << i))
            SetCoeff(ibuf, n+i);

      n += 4;
      s.get();
      c = s.peek();
      val = CharToIntVal(c);
   }

   a = ibuf;
   return s;
}
      
      

   



istream & operator>>(istream& s, GF2X& a)   
{   
   static ZZ ival;

   long c;   
   if (!s) Error("bad GF2X input"); 
   
   c = s.peek();  
   while (IsWhiteSpace(c)) {  
      s.get();  
      c = s.peek();  
   }  

   if (c == '0') {
      s.get();
      c = s.peek();
      if (c == 'x' || c == 'X') {
         s.get();
         return HexInput(s, a);
      }
      else {
         Error("bad GF2X input");
      }
   }

   if (c != '[') {  
      Error("bad GF2X input");  
   }  

   GF2X ibuf;  
   long n;   
   
   n = 0;   
   clear(ibuf);
      
   s.get();  
   c = s.peek();  
   while (IsWhiteSpace(c)) {  
      s.get();  
      c = s.peek();  
   }  

   while (c != ']' && c != EOF) {   
      if (!(s >> ival)) Error("bad GF2X input");
      SetCoeff(ibuf, n, to_GF2(ival));
      n++;

      c = s.peek();  

      while (IsWhiteSpace(c)) {  
         s.get();  
         c = s.peek();  
      }  
   }   

   if (c == EOF) Error("bad GF2X input");  
   s.get(); 
   
   a = ibuf; 
   return s;   
}    



static
ostream & HexOutput(ostream& s, const GF2X& a)
{
   s << "0x";

   long da = deg(a);

   if (da < 0) {
      s << '0';
      return s;
   }

   long i, n, val;

   val = 0;
   n = 0;
   for (i = 0; i <= da; i++) {
      val = val | (rep(coeff(a, i)) << n);
      n++;

      if (n == 4) {
         s << IntValToChar(val);
         val = 0;
         n = 0;
      }
   }

   if (val) 
      s << IntValToChar(val);

   return s;
}


ostream& operator<<(ostream& s, const GF2X& a)   
{   
   if (GF2X::HexOutput)
      return HexOutput(s, a);

   long i, da;   
   GF2 c;
  
   da = deg(a);
   
   s << '[';   
   
   for (i = 0; i <= da; i++) {   
      c = coeff(a, i);
      if (c == 0)
         s << "0";
      else
         s << "1";
      if (i < da) s << " ";   
   }   
   
   s << ']';   
      
   return s;   
}   

void random(GF2X& x, long n)
{
   if (n < 0) Error("GF2X random: negative length");

   if (NTL_OVERFLOW(n, 1, 0))
      Error("GF2X random: excessive length");

   long wl = (n+NTL_BITS_PER_LONG-1)/NTL_BITS_PER_LONG;

   x.xrep.SetLength(wl);

   long i;
   for (i = 0; i < wl-1; i++) {
      x.xrep[i] = RandomWord();
   }

   if (n > 0) {
      long pos = n % NTL_BITS_PER_LONG;
      if (pos == 0) pos = NTL_BITS_PER_LONG;
      x.xrep[wl-1] = RandomBits_ulong(pos);
   }

   x.normalize();
}

void add(GF2X& x, const GF2X& a, const GF2X& b)
{
   long sa = a.xrep.length();
   long sb = b.xrep.length();

   long i;

   if (sa == sb) {
      x.xrep.SetLength(sa);
      if (sa == 0) return;

      _ntl_ulong *xp = x.xrep.elts();
      const _ntl_ulong *ap = a.xrep.elts();
      const _ntl_ulong *bp = b.xrep.elts();

      for (i = 0; i < sa; i++)
         xp[i] = ap[i] ^ bp[i];

      i = sa-1;
      while (i >= 0 && !xp[i]) i--;
      x.xrep.QuickSetLength(i+1);
   }
   
   else if (sa < sb) {
      x.xrep.SetLength(sb);
      _ntl_ulong *xp = x.xrep.elts();
      const _ntl_ulong *ap = a.xrep.elts();
      const _ntl_ulong *bp = b.xrep.elts();

      for (i = 0; i < sa; i++)
         xp[i] = ap[i] ^ bp[i];

      for (; i < sb; i++)
         xp[i] = bp[i];
   }
   else { // sa > sb
      x.xrep.SetLength(sa);
      _ntl_ulong *xp = x.xrep.elts();
      const _ntl_ulong *ap = a.xrep.elts();
      const _ntl_ulong *bp = b.xrep.elts();

      for (i = 0; i < sb; i++)
         xp[i] = ap[i] ^ bp[i];

      for (; i < sa; i++)
         xp[i] = ap[i];
   }
}





/*
 * The bodies of mul1, Mul1, AddMul1, and mul_half
 * are generated by the MakeDesc program, and the
 * macros NTL_BB_MUL_CODE... are defined in mach_desc.h.
 * Thanks to Paul Zimmermann for providing improvements
 * to this approach.
 */


#if (defined(NTL_GF2X_ALTCODE1))

#define NTL_EFF_BB_MUL_CODE0 NTL_ALT1_BB_MUL_CODE0
#define NTL_EFF_BB_MUL_CODE1 NTL_ALT1_BB_MUL_CODE1
#define NTL_EFF_BB_MUL_CODE2 NTL_ALT1_BB_MUL_CODE2
#define NTL_EFF_SHORT_BB_MUL_CODE1 NTL_ALT1_SHORT_BB_MUL_CODE1
#define NTL_EFF_HALF_BB_MUL_CODE0 NTL_ALT1_HALF_BB_MUL_CODE0

#elif (defined(NTL_GF2X_ALTCODE))

#define NTL_EFF_BB_MUL_CODE0 NTL_ALT_BB_MUL_CODE0
#define NTL_EFF_BB_MUL_CODE1 NTL_ALT_BB_MUL_CODE1
#define NTL_EFF_BB_MUL_CODE2 NTL_ALT_BB_MUL_CODE2
#define NTL_EFF_SHORT_BB_MUL_CODE1 NTL_ALT_SHORT_BB_MUL_CODE1
#define NTL_EFF_HALF_BB_MUL_CODE0 NTL_ALT_HALF_BB_MUL_CODE0

#else

#define NTL_EFF_BB_MUL_CODE0 NTL_BB_MUL_CODE0
#define NTL_EFF_BB_MUL_CODE1 NTL_BB_MUL_CODE1
#define NTL_EFF_BB_MUL_CODE2 NTL_BB_MUL_CODE2
#define NTL_EFF_SHORT_BB_MUL_CODE1 NTL_SHORT_BB_MUL_CODE1
#define NTL_EFF_HALF_BB_MUL_CODE0 NTL_HALF_BB_MUL_CODE0

#endif



static 
void mul1(_ntl_ulong *c, _ntl_ulong a, _ntl_ulong b)
{

NTL_EFF_BB_MUL_CODE0


}


#ifdef NTL_GF2X_NOINLINE

#define mul1_IL mul1

#else

static inline
void mul1_inline(_ntl_ulong *c, _ntl_ulong a, _ntl_ulong b)
{


NTL_EFF_BB_MUL_CODE0


}

#define mul1_IL mul1_inline 
#endif


static 
void Mul1(_ntl_ulong *cp, const _ntl_ulong *bp, long sb, _ntl_ulong a)
{
 

NTL_EFF_BB_MUL_CODE1


}

static 
void AddMul1(_ntl_ulong *cp, const _ntl_ulong* bp, long sb, _ntl_ulong a)
{


NTL_EFF_BB_MUL_CODE2


}


static 
void Mul1_short(_ntl_ulong *cp, const _ntl_ulong *bp, long sb, _ntl_ulong a)
{
 

NTL_EFF_SHORT_BB_MUL_CODE1


}





static 
void mul_half(_ntl_ulong *c, _ntl_ulong a, _ntl_ulong b)
{


NTL_EFF_HALF_BB_MUL_CODE0


}


// mul2...mul8 hard-code 2x2...8x8 word multiplies.
// I adapted these routines from LiDIA (except mul3, see below).
// Inlining these seems to hurt, not help.

static
void mul2(_ntl_ulong *c, const _ntl_ulong *a, const _ntl_ulong *b)
{
   _ntl_ulong hs0, hs1;
   _ntl_ulong hl2[2];

   hs0 = a[0] ^ a[1];
   hs1 = b[0] ^ b[1];

   mul1_IL(c, a[0], b[0]);
   mul1_IL(c+2, a[1], b[1]);
   mul1_IL(hl2, hs0, hs1);


   hl2[0] = hl2[0] ^ c[0] ^ c[2];
   hl2[1] = hl2[1] ^ c[1] ^ c[3];

   c[1] ^= hl2[0];
   c[2] ^= hl2[1];
}


/*
 * This version of mul3 I got from Weimerskirch, Stebila, 
 * and Shantz, "Generic GF(2^m) arithmetic in software
 * an its application to ECC" (ACISP 2003).
 */

static
void mul3 (_ntl_ulong *c, const _ntl_ulong *a, const _ntl_ulong *b)
{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜成人在线视频| 国产传媒一区在线| 国产精品一区二区男女羞羞无遮挡| 成人一区二区视频| 欧美美女直播网站| 国产欧美精品一区二区色综合朱莉| 亚洲国产日韩一级| 成人激情小说网站| 26uuu国产电影一区二区| 亚洲香蕉伊在人在线观| 成人深夜在线观看| 精品欧美一区二区三区精品久久| 亚洲国产欧美在线人成| 精品乱人伦一区二区三区| 综合婷婷亚洲小说| 成人av第一页| 国产蜜臀av在线一区二区三区| 日本不卡一区二区三区高清视频| 99re成人精品视频| 一区在线播放视频| 成人免费看的视频| 国产欧美一区二区精品忘忧草 | 中文字幕av资源一区| 麻豆91精品视频| 欧美一级搡bbbb搡bbbb| 亚洲成人免费视频| 欧美日韩一区精品| 偷拍亚洲欧洲综合| 欧美性大战xxxxx久久久| 一区二区日韩av| 一本大道久久a久久精品综合| 中文字幕欧美激情一区| 成人免费av在线| 国产精品动漫网站| 一本久久精品一区二区| 亚洲人成小说网站色在线| 91浏览器入口在线观看| 一区二区视频在线| 欧美体内she精视频| 亚洲一二三四在线观看| 欧美日本一区二区三区| 日精品一区二区三区| 日韩欧美国产wwwww| 激情深爱一区二区| 国产精品丝袜91| 色综合久久久网| 亚洲午夜精品17c| 6080午夜不卡| 美女www一区二区| 久久久美女艺术照精彩视频福利播放| 国产美女精品在线| √…a在线天堂一区| 欧美亚洲另类激情小说| 天堂va蜜桃一区二区三区漫画版| 日韩欧美一区在线观看| 国产一区二区三区四区五区入口| 国产精品亲子伦对白| 91麻豆免费观看| 日韩精品电影在线| 久久综合九色综合97婷婷| 成人精品gif动图一区| 亚洲动漫第一页| 久久久久久久久免费| 色婷婷av一区二区| 久久精品国产**网站演员| 日本一区二区电影| 欧美日韩一区二区三区不卡| 久久aⅴ国产欧美74aaa| 国产精品久久久久久久浪潮网站| 欧美天堂一区二区三区| 国产乱色国产精品免费视频| 国产一区二区三区免费播放 | 国产大片一区二区| 一区二区三区电影在线播| 欧美一区二区三区视频在线| 不卡视频一二三| 久久精品国产亚洲a| 亚洲人成网站精品片在线观看| 91精品国产入口| 99久久99久久久精品齐齐| 久久97超碰色| 洋洋成人永久网站入口| 国产人伦精品一区二区| 欧美日韩成人激情| 成人高清免费观看| 国产自产视频一区二区三区| 亚洲成av人综合在线观看| 国产精品看片你懂得| 精品久久人人做人人爽| 欧美浪妇xxxx高跟鞋交| 91丝袜美女网| 成人黄色777网| 久久不见久久见免费视频7| 亚洲妇女屁股眼交7| 亚洲免费观看高清完整版在线 | 日韩午夜电影在线观看| 在线中文字幕一区二区| 成人精品鲁一区一区二区| 久久成人18免费观看| 天堂蜜桃一区二区三区| 亚洲夂夂婷婷色拍ww47| 亚洲天堂中文字幕| 国产精品久久久久国产精品日日| 久久先锋影音av鲁色资源| 日韩精品最新网址| 日韩欧美一级二级| 欧美一区二区三区视频| 91精品福利在线一区二区三区| 欧美在线视频日韩| 欧美最猛性xxxxx直播| 色屁屁一区二区| 色妹子一区二区| 色综合久久综合中文综合网| 99久久精品情趣| 91视频免费播放| 色综合久久综合网欧美综合网 | 粉嫩aⅴ一区二区三区四区五区| 久久99精品网久久| 精品一区二区三区的国产在线播放| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 一区二区三区精品在线| 中文字幕乱码日本亚洲一区二区| 久久亚洲影视婷婷| 国产亚洲欧美一区在线观看| 久久久www成人免费无遮挡大片| 欧美白人最猛性xxxxx69交| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 中文字幕免费不卡在线| 中日韩免费视频中文字幕| 中文字幕一区日韩精品欧美| 亚洲日本乱码在线观看| 亚洲国产精品自拍| 欧美aaaaa成人免费观看视频| 久久电影网站中文字幕| 国产宾馆实践打屁股91| 色香色香欲天天天影视综合网| 日本精品免费观看高清观看| 欧美二区在线观看| 久久综合久久综合亚洲| 亚洲视频一区二区免费在线观看| 亚洲国产欧美在线| 国内精品国产成人国产三级粉色| 粉嫩高潮美女一区二区三区| 在线观看欧美日本| 精品久久久久久最新网址| 国产精品美女久久久久久久| 亚洲一区二区在线免费看| 美脚の诱脚舐め脚责91| 波多野结衣中文字幕一区二区三区| 色屁屁一区二区| 精品国产乱子伦一区| 亚洲人成小说网站色在线| 日韩国产一二三区| 成人黄色综合网站| 91精品午夜视频| 中文字幕不卡的av| 免费av成人在线| 91视频免费播放| 久久综合色8888| 同产精品九九九| av毛片久久久久**hd| 日韩欧美国产一二三区| 亚洲综合图片区| 国产成人精品亚洲777人妖| 制服丝袜亚洲播放| 亚洲日本在线视频观看| 久久不见久久见免费视频7| 在线免费一区三区| 国产精品网站在线| 韩日av一区二区| 欧美日本一道本| 中文字幕亚洲一区二区va在线| 久久99精品久久久久久国产越南| 在线亚洲欧美专区二区| 亚洲国产岛国毛片在线| 九色|91porny| 3d动漫精品啪啪1区2区免费 | 色噜噜偷拍精品综合在线| 国产欧美一区二区三区鸳鸯浴| 日韩精品一级二级| 欧美视频在线播放| 亚洲欧美日韩中文播放| 成人av电影在线播放| 国产网站一区二区三区| 精品一区二区三区在线观看国产 | 久久日韩精品一区二区五区| 天堂成人国产精品一区| 在线亚洲精品福利网址导航| 中文字幕在线播放不卡一区| 国产成人av电影在线| 久久毛片高清国产| 精品一区二区三区蜜桃| 欧美成人一区二区三区片免费 | 国产精品一区二区久激情瑜伽| 91精品欧美一区二区三区综合在 | 成人午夜在线免费| 亚洲国产高清不卡| 不卡的av中国片| 中文字幕一区二区三区蜜月 | 国产成人在线免费|