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

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

?? zz.cpp

?? 大數運算類
?? 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;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩午夜激情视频| 久久精品亚洲一区二区三区浴池| 久久草av在线| 亚洲男同1069视频| 26uuu欧美| 欧美人伦禁忌dvd放荡欲情| 懂色av一区二区三区蜜臀| 亚洲h动漫在线| 日韩毛片精品高清免费| 久久久精品日韩欧美| 亚洲欧美一区二区三区孕妇| 制服丝袜亚洲精品中文字幕| 91视频com| 成人av在线资源网| 国产精品亚洲专一区二区三区| 午夜精品在线视频一区| 亚洲人成7777| 国产精品亲子伦对白| 欧美成人精精品一区二区频| 欧美精品在线观看一区二区| 日本韩国精品一区二区在线观看| 成人精品免费视频| 国产成人免费视频| 国产精品一级在线| 黄网站免费久久| 蜜臀av性久久久久蜜臀aⅴ四虎| 一区二区三区四区不卡在线| 中文字幕人成不卡一区| 欧美激情在线免费观看| 久久网站最新地址| 久久日一线二线三线suv| 日韩欧美123| 欧美大黄免费观看| 日韩欧美资源站| 欧美一二三区在线| 56国语精品自产拍在线观看| 欧美日韩一级视频| 欧美精品在线观看播放| 777久久久精品| 日韩亚洲欧美在线观看| 日韩一级免费观看| 欧美xingq一区二区| 精品国产污网站| 久久久亚洲欧洲日产国码αv| 精品久久久久久亚洲综合网 | 美国一区二区三区在线播放| 日日夜夜一区二区| 久久爱www久久做| 国产在线看一区| 欧美一区二区大片| 日韩片之四级片| 久久噜噜亚洲综合| 国产精品久久久久久久浪潮网站| 国产精品视频九色porn| 亚洲欧美另类图片小说| 亚洲国产综合在线| 日本aⅴ亚洲精品中文乱码| 久久精品国内一区二区三区| 国产精品1024久久| www.日韩av| 欧美日韩一级二级三级| 欧美精三区欧美精三区| 欧美精品一区二区在线播放| 国产日韩精品一区二区三区 | 亚洲欧美日本韩国| 亚洲一区在线看| 日本麻豆一区二区三区视频| 国产在线看一区| 色综合天天综合在线视频| 欧美日本一区二区三区四区| 精品久久久久av影院| 国产精品三级在线观看| 一区二区三区毛片| 激情综合色播五月| aaa欧美日韩| 欧美人与z0zoxxxx视频| 久久久美女艺术照精彩视频福利播放| 日本一区二区三区国色天香| 亚洲自拍欧美精品| 久久不见久久见中文字幕免费| 不卡的电视剧免费网站有什么| 在线影院国内精品| 精品久久久久99| 一区二区三区视频在线观看| 蜜桃av一区二区| 成人av在线一区二区| 7777精品伊人久久久大香线蕉的| 欧美国产综合色视频| 午夜精品久久久久久久久久| 国产精品夜夜嗨| 51午夜精品国产| 国产精品久久久久影视| 日本vs亚洲vs韩国一区三区二区 | 成人中文字幕在线| 欧美日韩免费观看一区三区| 国产视频一区在线观看| 亚洲成人动漫一区| jlzzjlzz亚洲日本少妇| 日韩西西人体444www| 亚洲免费看黄网站| 国产又黄又大久久| 欧美一区二区三区小说| 亚洲激情一二三区| 成人午夜电影小说| 精品美女在线观看| 日韩中文字幕亚洲一区二区va在线 | 一区二区三区国产精华| 激情深爱一区二区| 欧美精品一卡二卡| 亚洲夂夂婷婷色拍ww47| 成人黄色网址在线观看| 久久综合久久99| 奇米影视一区二区三区| 欧美人与性动xxxx| 亚洲一区精品在线| 色综合视频在线观看| 国产精品麻豆久久久| 国产一区不卡视频| 欧美r级电影在线观看| 日韩高清在线不卡| 在线欧美日韩精品| 中文字幕佐山爱一区二区免费| 国产最新精品免费| 精品国产免费久久| 蜜桃精品在线观看| 日韩欧美国产麻豆| 日本成人在线一区| 在线观看免费亚洲| 亚洲人成人一区二区在线观看 | 5566中文字幕一区二区电影| 亚洲尤物视频在线| 91福利区一区二区三区| 一区二区高清在线| 在线一区二区三区| 亚洲一区中文日韩| 欧美色老头old∨ideo| 一区二区三区精品久久久| 色8久久精品久久久久久蜜 | 国产麻豆午夜三级精品| 欧美mv和日韩mv国产网站| 免费在线观看一区二区三区| 4438x成人网最大色成网站| 日韩二区在线观看| 这里只有精品视频在线观看| 全国精品久久少妇| 精品日韩欧美一区二区| 亚洲r级在线视频| 日本美女一区二区| 尤物视频一区二区| 成人免费毛片app| 国产精品美日韩| 日本高清不卡aⅴ免费网站| 一区2区3区在线看| 欧美三级一区二区| 天天综合天天做天天综合| 日韩写真欧美这视频| 国产精品一线二线三线精华| 中文字幕精品一区| 欧美亚洲动漫制服丝袜| 蜜臀91精品一区二区三区| 国产亚洲欧美一区在线观看| 成人污污视频在线观看| 又紧又大又爽精品一区二区| 69堂精品视频| 国产 欧美在线| 综合欧美亚洲日本| 欧美精品一卡两卡| 国产一区二区福利| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 91在线免费视频观看| 亚洲国产精品久久人人爱| 欧美一区二区三区人| 成人黄色软件下载| 日韩电影免费一区| 久久精品夜夜夜夜久久| 一本色道久久综合狠狠躁的推荐 | 风间由美一区二区av101| 日韩一区有码在线| 91精品久久久久久久91蜜桃| 国产一区二区不卡| 性做久久久久久免费观看| 久久久久久久一区| 欧美亚洲动漫制服丝袜| 国产激情视频一区二区在线观看 | 日本成人在线一区| 国产精品久久久久一区二区三区共 | 亚洲欧美色一区| 精品剧情在线观看| 日本韩国一区二区三区| 精品一区二区在线视频| 一区二区在线观看不卡| 久久午夜羞羞影院免费观看| 欧美中文字幕一二三区视频| 国产白丝网站精品污在线入口| 五月天激情小说综合| 国产精品美女久久久久高潮| 日韩一区二区影院| 91黄色免费网站| 成人午夜电影久久影院| 黄网站免费久久|