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

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

?? zz.cpp

?? NTL is a high-performance, portable C++ library providing data structures and algorithms for manipul
?? CPP
?? 第 1 頁 / 共 3 頁
字號:


#include <NTL/ZZ.h>
#include <NTL/vec_ZZ.h>


#include <NTL/new.h>



NTL_START_IMPL




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


const ZZ& ZZ_expo(long e)
{
   static ZZ expo_helper;
   conv(expo_helper, e);
   return expo_helper;
}




void AddMod(ZZ& x, const ZZ& a, long b, const ZZ& n)
{
   static ZZ B;
   conv(B, b);
   AddMod(x, a, B, n);
}


void SubMod(ZZ& x, const ZZ& a, long b, const ZZ& n)
{
   static ZZ B;
   conv(B, b);
   SubMod(x, a, B, n);
}

void SubMod(ZZ& x, long a, const ZZ& b, const ZZ& n)
{
   static ZZ A;
   conv(A, a);
   SubMod(x, A, b, n);
}



// ****** input and output

static long iodigits = 0;
static long ioradix = 0;

// iodigits is the greatest integer such that 10^{iodigits} < NTL_WSP_BOUND
// ioradix = 10^{iodigits}

static void InitZZIO()
{
   long x;

   x = (NTL_WSP_BOUND-1)/10;
   iodigits = 0;
   ioradix = 1;

   while (x) {
      x = x / 10;
      iodigits++;
      ioradix = ioradix * 10;
   }

   if (iodigits <= 0) Error("problem with I/O");
}

istream& operator>>(istream& s, ZZ& x)
{
   long c;
   long cval;
   long sign;
   long ndigits;
   long acc;
   static ZZ a;

   if (!s) Error("bad ZZ input");

   if (!iodigits) InitZZIO();

   a = 0;

   SkipWhiteSpace(s);
   c = s.peek();

   if (c == '-') {
      sign = -1;
      s.get();
      c = s.peek();
   }
   else
      sign = 1;

   cval = CharToIntVal(c);

   if (cval < 0 || cval > 9) Error("bad ZZ input");

   ndigits = 0;
   acc = 0;
   while (cval >= 0 && cval <= 9) {
      acc = acc*10 + cval;
      ndigits++;

      if (ndigits == iodigits) {
         mul(a, a, ioradix);
         add(a, a, acc);
         ndigits = 0;
         acc = 0;
      }

      s.get();
      c = s.peek();
      cval = CharToIntVal(c);
   }

   if (ndigits != 0) {
      long mpy = 1;
      while (ndigits > 0) {
         mpy = mpy * 10;
         ndigits--;
      }

      mul(a, a, mpy);
      add(a, a, acc);
   }

   if (sign == -1)
      negate(a, a);

   x = a;

   return s;
}


// The class _ZZ_local_stack should be defined in an empty namespace,
// but since I don't want to rely on namespaces, we just give it a funny 
// name to avoid accidental name clashes.

struct _ZZ_local_stack {
   long top;
   long alloc;
   long *elts;

   _ZZ_local_stack() { top = -1; alloc = 0; elts = 0; }
   ~_ZZ_local_stack() { }

   long pop() { return elts[top--]; }
   long empty() { return (top == -1); }
   void push(long x);
};

void _ZZ_local_stack::push(long x)
{
   if (alloc == 0) {
      alloc = 100;
      elts = (long *) NTL_MALLOC(alloc, sizeof(long), 0);
   }

   top++;

   if (top + 1 > alloc) {
      alloc = 2*alloc;
      elts = (long *) NTL_REALLOC(elts, alloc, sizeof(long), 0);
   }

   if (!elts) {
      Error("out of space in ZZ output");
   }

   elts[top] = x;
}


static
void PrintDigits(ostream& s, long d, long justify)
{
   static char *buf = 0;

   if (!buf) {
      buf = (char *) NTL_MALLOC(iodigits, 1, 0);
      if (!buf) Error("out of memory");
   }

   long i = 0;

   while (d) {
      buf[i] = IntValToChar(d % 10);
      d = d / 10;
      i++;
   }

   if (justify) {
      long j = iodigits - i;
      while (j > 0) {
         s << "0";
         j--;
      }
   }

   while (i > 0) {
      i--;
      s << buf[i];
   }
}
      

   

ostream& operator<<(ostream& s, const ZZ& a)
{
   static ZZ b;
   static _ZZ_local_stack S;
   long r;
   long k;

   if (!iodigits) InitZZIO();

   b = a;

   k = sign(b);

   if (k == 0) {
      s << "0";
      return s;
   }

   if (k < 0) {
      s << "-";
      negate(b, b);
   }

   do {
      r = DivRem(b, b, ioradix);
      S.push(r);
   } while (!IsZero(b));

   r = S.pop();
   PrintDigits(s, r, 0);

   while (!S.empty()) {
      r = S.pop();
      PrintDigits(s, r, 1);
   }
      
   return s;
}



long GCD(long a, long b)
{
   long u, v, t, x;

   if (a < 0) {
      if (a < -NTL_MAX_LONG) Error("GCD: integer overflow");
      a = -a;
   }

   if (b < 0) {
      if (b < -NTL_MAX_LONG) Error("GCD: integer overflow");
      b = -b;
   }


   if (b==0)
      x = a;
   else {
      u = a;
      v = b;
      do {
         t = u % v;
         u = v; 
         v = t;
      } while (v != 0);

      x = u;
   }

   return x;
}

         

void XGCD(long& d, long& s, long& t, long a, long b)
{
   long  u, v, u0, v0, u1, v1, u2, v2, q, r;

   long aneg = 0, bneg = 0;

   if (a < 0) {
      if (a < -NTL_MAX_LONG) Error("XGCD: integer overflow");
      a = -a;
      aneg = 1;
   }

   if (b < 0) {
      if (b < -NTL_MAX_LONG) Error("XGCD: integer overflow");
      b = -b;
      bneg = 1;
   }

   u1=1; v1=0;
   u2=0; v2=1;
   u = a; v = b;

   while (v != 0) {
      q = u / v;
      r = u % v;
      u = v;
      v = r;
      u0 = u2;
      v0 = v2;
      u2 =  u1 - q*u2;
      v2 = v1- q*v2;
      u1 = u0;
      v1 = v0;
   }

   if (aneg)
      u1 = -u1;

   if (bneg)
      v1 = -v1;

   d = u;
   s = u1;
   t = v1;
}
   

long InvMod(long a, long n)
{
   long d, s, t;

   XGCD(d, s, t, a, n);
   if (d != 1) Error("InvMod: inverse undefined");
   if (s < 0)
      return s + n;
   else
      return s;
}


long PowerMod(long a, long ee, long n)
{
   long x, y;

   unsigned long e;

   if (ee < 0)
      e = - ((unsigned long) ee);
   else
      e = ee;

   x = 1;
   y = a;
   while (e) {
      if (e & 1) x = MulMod(x, y, n);
      y = MulMod(y, y, n);
      e = e >> 1;
   }

   if (ee < 0) x = InvMod(x, n);

   return x;
}

long ProbPrime(long n, long NumTests)
{
   long m, x, y, z;
   long i, j, k;

   if (n <= 1) return 0;


   if (n == 2) return 1;
   if (n % 2 == 0) return 0;

   if (n == 3) return 1;
   if (n % 3 == 0) return 0;

   if (n == 5) return 1;
   if (n % 5 == 0) return 0;

   if (n == 7) return 1;
   if (n % 7 == 0) return 0;

   if (n >= NTL_SP_BOUND) {
      return ProbPrime(to_ZZ(n), NumTests);
   }

   m = n - 1;
   k = 0;
   while((m & 1) == 0) {
      m = m >> 1;
      k++;
   }

   // n - 1 == 2^k * m, m odd

   for (i = 0; i < NumTests; i++) {
      do {
         x = RandomBnd(n);
      } while (x == 0);
      // x == 0 is not a useful candidtae for a witness!


      if (x == 0) continue;
      z = PowerMod(x, m, n);
      if (z == 1) continue;
   
      j = 0;
      do {
         y = z;
         z = MulMod(y, y, n);
         j++;
      } while (j != k && z != 1);

      if (z != 1 || y !=  n-1) return 0;
   }

   return 1;
}


long MillerWitness(const ZZ& n, const ZZ& x)
{
   ZZ m, y, z;
   long j, k;

   if (x == 0) return 0;

   add(m, n, -1);
   k = MakeOdd(m);
   // n - 1 == 2^k * m, m odd

   PowerMod(z, x, m, n);
   if (z == 1) return 0;

   j = 0;
   do {
      y = z;
      SqrMod(z, y, n);
      j++;
   } while (j != k && z != 1);

   if (z != 1) return 1;
   add(y, y, 1);
   if (y != n) return 1;
   return 0;
}


// ComputePrimeBound computes a reasonable bound for trial
// division in the Miller-Rabin test.
// It is computed a bit on the "low" side, since being a bit
// low doesn't hurt much, but being too high can hurt a lot.

static
long ComputePrimeBound(long bn)
{
   long wn = (bn+NTL_ZZ_NBITS-1)/NTL_ZZ_NBITS;

   long fn;

   if (wn <= 36)
      fn = wn/4 + 1;
   else
      fn = long(1.67*sqrt(double(wn)));

   long prime_bnd;

   if (NumBits(bn) + NumBits(fn) > NTL_SP_NBITS)
      prime_bnd = NTL_SP_BOUND;
   else
      prime_bnd = bn*fn;

   return prime_bnd;
}


long ProbPrime(const ZZ& n, long NumTrials)
{
   if (n <= 1) return 0;

   if (n.SinglePrecision()) {
      return ProbPrime(to_long(n), NumTrials);
   }


   long prime_bnd = ComputePrimeBound(NumBits(n));


   PrimeSeq s;
   long p;

   p = s.next();
   while (p && p < prime_bnd) {
      if (rem(n, p) == 0)
         return 0;

      p = s.next();
   }

   ZZ W;
   W = 2;

   // first try W == 2....the exponentiation
   // algorithm runs slightly faster in this case

   if (MillerWitness(n, W))
      return 0;


   long i;

   for (i = 0; i < NumTrials; i++) {
      do {
         RandomBnd(W, n);
      } while (W == 0);
      // W == 0 is not a useful candidate for a witness!

      if (MillerWitness(n, W)) 
         return 0;
   }

   return 1;
}


void RandomPrime(ZZ& n, long l, long NumTrials)
{
   if (l <= 1)
      Error("RandomPrime: l out of range");

   if (l == 2) {
      if (RandomBnd(2))
         n = 3;
      else
         n = 2;

      return;
   }

   do {
      RandomLen(n, l);
      if (!IsOdd(n)) add(n, n, 1);
   } while (!ProbPrime(n, NumTrials));
}

void NextPrime(ZZ& n, const ZZ& m, long NumTrials)
{
   ZZ x;

   if (m <= 2) {
      n = 2;
      return;
   }

   x = m;

   while (!ProbPrime(x, NumTrials))
      add(x, x, 1);

   n = x;
}

long NextPrime(long m, long NumTrials)
{
   long x;

   if (m <= 2) 
      return 2;

   x = m;

   while (x < NTL_SP_BOUND && !ProbPrime(x, NumTrials))
      x++;

   if (x >= NTL_SP_BOUND)
      Error("NextPrime: no more primes");

   return x;
}



long NextPowerOfTwo(long m)
{
   long k; 
   unsigned long n, um;

   if (m < 0) return 0;

   um = m;
   n = 1;
   k = 0;

   while (n < um) {
      n = n << 1;
      k++;
   }

   if (k >= NTL_BITS_PER_LONG-1)
      Error("NextPowerOfTwo: overflow");

   return k;
}



long NumBits(long a)
{
   unsigned long aa;
   if (a < 0) 
      aa = - ((unsigned long) a);
   else
      aa = a;

   long k = 0;
   while (aa) {
      k++;
      aa = aa >> 1;
   }

   return k;
}


long bit(long a, long k)
{
   unsigned long aa;
   if (a < 0)
      aa = - ((unsigned long) a);
   else
      aa = a;

   if (k < 0 || k >= NTL_BITS_PER_LONG) 
      return 0;
   else
      return long((aa >> k) & 1);
}



long divide(ZZ& q, const ZZ& a, const ZZ& b)
{
   static ZZ qq, r;

   if (IsZero(b)) {
      if (IsZero(a)) {
         clear(q);
         return 1;
      }
      else
         return 0;
   }


   if (IsOne(b)) {
      q = a;
      return 1;
   }

   DivRem(qq, r, a, b);
   if (!IsZero(r)) return 0;
   q = qq;
   return 1;
}

long divide(const ZZ& a, const ZZ& b)
{
   static ZZ r;

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

   rem(r, a, b);
   return IsZero(r);
}

long divide(ZZ& q, const ZZ& a, long b)
{
   static ZZ qq;

   if (!b) {
      if (IsZero(a)) {
         clear(q);
         return 1;
      }
      else
         return 0;
   }

   if (b == 1) {
      q = a;
      return 1;
   }

   long r = DivRem(qq, a, b);
   if (r) return 0;
   q = qq;
   return 1;
}

long divide(const ZZ& a, long b)
{
   if (!b) return IsZero(a);
   if (b == 1) {
      return 1;
   }

   long r = rem(a,  b);
   return (r == 0);
}
   


long RandomPrime_long(long l, long NumTrials)
{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美亚洲免费在线一区| 日韩精品专区在线| 91精品国产91久久久久久一区二区 | 国产剧情一区二区| 欧美无乱码久久久免费午夜一区| 日韩视频免费观看高清完整版在线观看 | 精品国产1区二区| 亚洲欧洲成人av每日更新| 亚洲超碰97人人做人人爱| 成人免费视频国产在线观看| 日韩一区二区免费视频| 亚洲午夜在线观看视频在线| 丰满岳乱妇一区二区三区| 欧美精品电影在线播放| 亚洲欧美激情插 | 欧美国产丝袜视频| 免费日韩伦理电影| 欧美日韩国产影片| 一区二区三区毛片| 91浏览器在线视频| 国产婷婷色一区二区三区| 日本欧美一区二区三区| ww亚洲ww在线观看国产| 亚洲国产精品久久一线不卡| 成人av网站在线| 国产欧美精品在线观看| 国产一区二区三区久久久| 日韩精品在线网站| 日本aⅴ免费视频一区二区三区| 欧美四级电影网| 亚洲福利视频一区二区| 色婷婷亚洲精品| 一区二区三区四区在线播放 | 亚洲综合清纯丝袜自拍| 91精品福利在线| 亚洲不卡av一区二区三区| 欧美日韩亚洲综合| 日韩av一二三| 欧美一级欧美一级在线播放| 美日韩一级片在线观看| 精品福利一二区| 大胆欧美人体老妇| 综合av第一页| 欧美日韩国产经典色站一区二区三区 | 另类小说一区二区三区| 久久综合久久鬼色中文字| 国产成人免费9x9x人网站视频| 国产欧美日韩不卡免费| 成人av资源站| 一区二区三区成人| 日韩视频免费观看高清完整版 | 午夜精品久久久久| 日韩欧美中文一区二区| 加勒比av一区二区| 国产精品久久久久久久久搜平片 | 中日韩免费视频中文字幕| 一本色道久久加勒比精品 | 日韩视频在线你懂得| 韩国精品主播一区二区在线观看| 国产欧美一区二区三区网站| 94-欧美-setu| 免费久久精品视频| 国产清纯在线一区二区www| 欧亚洲嫩模精品一区三区| 青娱乐精品视频在线| 国产精品无人区| 欧美日韩综合在线| 国产精品一区二区久久精品爱涩 | 精品视频1区2区3区| 久久99久久久欧美国产| 亚洲视频电影在线| 欧美精品一区二区三区蜜桃| 一本色道久久综合狠狠躁的推荐| 99久久免费精品高清特色大片| 性久久久久久久久| 国产精品女同互慰在线看| 欧美精选在线播放| 成人教育av在线| 奇米精品一区二区三区在线观看| 国产精品美女久久久久久久久| 777午夜精品视频在线播放| 丁香六月综合激情| 日韩精品电影在线观看| 国产精品乱子久久久久| 欧美va亚洲va在线观看蝴蝶网| 99re成人精品视频| 国产主播一区二区三区| 天堂资源在线中文精品| 亚洲图片另类小说| 国产亚洲精品福利| 日韩丝袜情趣美女图片| 欧美三电影在线| 91在线精品秘密一区二区| 国产高清久久久| 青草国产精品久久久久久| 亚洲一级在线观看| 亚洲激情男女视频| 亚洲天堂福利av| 亚洲天堂免费看| 自拍偷拍欧美精品| 国产精品久久久久久亚洲伦| 国产日本亚洲高清| 国产亚洲人成网站| 久久久久国色av免费看影院| 日韩精品一区二区三区视频在线观看 | 婷婷综合久久一区二区三区| 亚洲免费高清视频在线| 亚洲素人一区二区| 18成人在线观看| 中文字幕在线一区免费| ㊣最新国产の精品bt伙计久久| 日本一区二区三区久久久久久久久不 | 亚洲精品免费看| 亚洲欧美国产77777| 亚洲免费av高清| 亚洲国产精品综合小说图片区| 亚洲在线免费播放| 无码av免费一区二区三区试看| 亚洲一区二三区| 香蕉成人啪国产精品视频综合网| 亚洲国产婷婷综合在线精品| 亚洲电影视频在线| 蜜桃视频一区二区| 国产精品一品二品| 不卡在线观看av| 欧美优质美女网站| 欧美精品v日韩精品v韩国精品v| 制服丝袜中文字幕亚洲| 欧美本精品男人aⅴ天堂| 精品三级在线观看| 中文字幕乱码亚洲精品一区| 亚洲日本青草视频在线怡红院| 一区二区三区电影在线播| 视频一区欧美精品| 国产老妇另类xxxxx| 97精品国产露脸对白| 欧美日免费三级在线| 欧美一区二区精品久久911| 亚洲国产一区视频| 久久99日本精品| 成人av免费观看| 欧美日韩国产成人在线91| 久久先锋资源网| 亚洲免费在线视频一区 二区| 亚洲高清中文字幕| 国产精品自产自拍| 欧美伊人久久久久久久久影院| 欧美一级片免费看| 亚洲视频 欧洲视频| 老汉av免费一区二区三区 | 亚洲欧洲中文日韩久久av乱码| 亚洲国产精品久久不卡毛片| 久久国产精品99久久人人澡| 99久久99久久精品免费观看| 欧美狂野另类xxxxoooo| 国产精品无遮挡| 天天综合网 天天综合色| 丰满亚洲少妇av| 日韩欧美资源站| 亚洲品质自拍视频网站| 国模冰冰炮一区二区| 欧美日韩视频在线第一区| 久久精品夜夜夜夜久久| 亚洲高清久久久| 91在线播放网址| 久久精子c满五个校花| 日韩av电影天堂| 色综合久久久久网| 中文在线免费一区三区高中清不卡| 亚洲妇熟xx妇色黄| 91在线视频18| 国产精品美女久久久久aⅴ国产馆| 日韩电影免费在线看| 一本色道久久加勒比精品| 国产精品免费视频一区| 久久福利视频一区二区| 欧美精品第1页| 亚洲午夜激情网站| 色欧美日韩亚洲| 亚洲欧洲日韩av| 国产99精品在线观看| 精品免费99久久| 日韩精品国产精品| 91精品国产综合久久久久久| 一区二区三区.www| 色一情一伦一子一伦一区| 国产精品久久毛片a| 国产麻豆成人精品| 亚洲精品在线电影| 九九九精品视频| 精品国产乱码久久久久久影片| 男男视频亚洲欧美| 欧美另类videos死尸| 午夜亚洲国产au精品一区二区 | 91九色02白丝porn| 亚洲女人****多毛耸耸8| 色天天综合色天天久久| 亚洲欧洲国产专区| 在线精品视频免费播放| 亚洲精品你懂的|