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

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

?? zz_px1.c

?? 密碼大家Shoup寫的數論算法c語言實現
?? C
?? 第 1 頁 / 共 3 頁
字號:
void ProbMinPolyMod(ZZ_pX& h, const ZZ_pX& g, const ZZ_pXModulus& F, long m) {   long n = F.n;   if (m < 1 || m > n) Error("ProbMinPoly: bad args");      long i;   vec_ZZ_p R(INIT_SIZE, n);   for (i = 0; i < n; i++) random(R[i]);   DoMinPolyMod(h, g, F, m, R);}void MinPolyMod(ZZ_pX& hh, const ZZ_pX& g, const ZZ_pXModulus& F, long m) {   ZZ_pX h, h1;   long n = F.n;   if (m < 1 || m > n) Error("MinPoly: bad args");   /* probabilistically compute min-poly */   ProbMinPolyMod(h, g, F, m);   if (deg(h) == m) { hh = h; return; }   CompMod(h1, h, g, F);   if (IsZero(h1)) { hh = h; return; }   /* not completely successful...must iterate */   long i;   ZZ_pX h2, h3;   ZZ_pXMultiplier H1;   vec_ZZ_p R(INIT_SIZE, n);   for (;;) {      R.SetLength(n);      for (i = 0; i < n; i++) random(R[i]);      build(H1, h1, F);      UpdateMap(R, R, H1, F);      DoMinPolyMod(h2, g, F, m-deg(h), R);      mul(h, h, h2);      if (deg(h) == m) { hh = h; return; }      CompMod(h3, h2, g, F);      MulMod(h1, h3, H1, F);      if (IsZero(h1)) { hh = h; return; }   }}void IrredPolyMod(ZZ_pX& h, const ZZ_pX& g, const ZZ_pXModulus& F, long m) {   vec_ZZ_p R(INIT_SIZE, 1);   if (m < 1 || m > F.n) Error("IrredPoly: bad args");   set(R[0]);   DoMinPolyMod(h, g, F, m, R);}void diff(ZZ_pX& x, const ZZ_pX& a){   long n = deg(a);   long i;   if (n <= 0) {      clear(x);      return;   }   if (&x != &a)      x.rep.SetLength(n);   for (i = 0; i <= n-1; i++) {      mul(x.rep[i], a.rep[i+1], i+1);   }   if (&x == &a)      x.rep.SetLength(n);   x.normalize();}void MakeMonic(ZZ_pX& x){   if (IsZero(x))      return;   if (IsOne(LeadCoeff(x)))      return;   ZZ_p t;   inv(t, LeadCoeff(x));   mul(x, x, t);}      void PlainMulTrunc(ZZ_pX& x, const ZZ_pX& a, const ZZ_pX& b, long n){   ZZ_pX y;   mul(y, a, b);   trunc(x, y, n);}void FFTMulTrunc(ZZ_pX& x, const ZZ_pX& a, const ZZ_pX& b, long n){   if (IsZero(a) || IsZero(b)) {      clear(x);      return;   }   long d = deg(a) + deg(b);   if (n > d + 1)      n = d + 1;   long k = NextPowerOfTwo(d + 1);   FFTRep R1(INIT_SIZE, k), R2(INIT_SIZE, k);   ToFFTRep(R1, a, k);   ToFFTRep(R2, b, k);   mul(R1, R1, R2);   FromFFTRep(x, R1, 0, n-1);}void MulTrunc(ZZ_pX& x, const ZZ_pX& a, const ZZ_pX& b, long n){   if (n < 0) Error("MulTrunc: bad args");   if (deg(a) <= NTL_ZZ_pX_FFT_CROSSOVER || deg(b) <= NTL_ZZ_pX_FFT_CROSSOVER)      PlainMulTrunc(x, a, b, n);   else      FFTMulTrunc(x, a, b, n);}      void PlainSqrTrunc(ZZ_pX& x, const ZZ_pX& a, long n){   ZZ_pX y;   sqr(y, a);   trunc(x, y, n);}void FFTSqrTrunc(ZZ_pX& x, const ZZ_pX& a, long n){   if (IsZero(a)) {      clear(x);      return;   }   long d = 2*deg(a);   if (n > d + 1)      n = d + 1;   long k = NextPowerOfTwo(d + 1);   FFTRep R1(INIT_SIZE, k);   ToFFTRep(R1, a, k);   mul(R1, R1, R1);   FromFFTRep(x, R1, 0, n-1);}void SqrTrunc(ZZ_pX& x, const ZZ_pX& a, long n){   if (n < 0) Error("SqrTrunc: bad args");   if (deg(a) <= NTL_ZZ_pX_FFT_CROSSOVER)      PlainSqrTrunc(x, a, n);   else      FFTSqrTrunc(x, a, n);}void FastTraceVec(vec_ZZ_p& S, const ZZ_pX& f){   long n = deg(f);   if (n <= 0)       Error("FastTraceVec: bad args");   if (n == 0) {      S.SetLength(0);      return;   }   if (n == 1) {      S.SetLength(1);      set(S[0]);      return;   }      long i;   ZZ_pX f1;   f1.rep.SetLength(n-1);   for (i = 0; i <= n-2; i++)      f1.rep[i] = f.rep[n-i];   f1.normalize();   ZZ_pX f2;   f2.rep.SetLength(n-1);   for (i = 0; i <= n-2; i++)      mul(f2.rep[i], f.rep[n-1-i], i+1);   f2.normalize();   ZZ_pX f3;   InvTrunc(f3, f1, n-1);   MulTrunc(f3, f3, f2, n-1);   S.SetLength(n);   S[0] = n;   for (i = 1; i < n; i++)      negate(S[i], coeff(f3, i-1));}void PlainTraceVec(vec_ZZ_p& S, const ZZ_pX& ff){   if (deg(ff) <= 0)      Error("TraceVec: bad args");   ZZ_pX f;   f = ff;   MakeMonic(f);   long n = deg(f);   S.SetLength(n);   if (n == 0)      return;   long k, i;   ZZ acc, t;   ZZ_p t1;   S[0] = n;   for (k = 1; k < n; k++) {      mul(acc, rep(f.rep[n-k]), k);      for (i = 1; i < k; i++) {         mul(t, rep(f.rep[n-i]), rep(S[k-i]));         add(acc, acc, t);      }      conv(t1, acc);      negate(S[k], t1);   }}void TraceVec(vec_ZZ_p& S, const ZZ_pX& f){   if (deg(f) <= NTL_ZZ_pX_TRACE_CROSSOVER)      PlainTraceVec(S, f);   else      FastTraceVec(S, f);}void ComputeTraceVec(const ZZ_pXModulus& F){   vec_ZZ_p& S = *((vec_ZZ_p *) &F.tracevec);   if (S.length() > 0)      return;   if (!F.UseFFT) {      PlainTraceVec(S, F.f);      return;   }   long i;   long n = F.n;   FFTRep R;   ZZ_pX P, g;   g.rep.SetLength(n-1);   for (i = 1; i < n; i++)      mul(g.rep[n-i-1], F.f.rep[n-i], i);    g.normalize();   ToFFTRep(R, g, F.l);   mul(R, R, F.HRep);   FromFFTRep(P, R, n-2, 2*n-4);   S.SetLength(n);   S[0] = n;   for (i = 1; i < n; i++)      negate(S[i], coeff(P, n-1-i));}void TraceMod(ZZ_p& x, const ZZ_pX& a, const ZZ_pXModulus& F){   long n = F.n;   if (deg(a) >= n)      Error("trace: bad args");   if (F.tracevec.length() == 0)       ComputeTraceVec(F);   InnerProduct(x, a.rep, F.tracevec);}void TraceMod(ZZ_p& x, const ZZ_pX& a, const ZZ_pX& f){   if (deg(a) >= deg(f) || deg(f) <= 0)      Error("trace: bad args");   project(x, TraceVec(f), a);}void PlainResultant(ZZ_p& rres, const ZZ_pX& a, const ZZ_pX& b){   ZZ_p res;    if (IsZero(a) || IsZero(b))      clear(res);   else if (deg(a) == 0 && deg(b) == 0)       set(res);   else {      long d0, d1, d2;      ZZ_p lc;      set(res);      long n = max(deg(a),deg(b)) + 1;      ZZ_pX u(INIT_SIZE, n), v(INIT_SIZE, n);      ZZVec tmp(n, ZZ_pInfo->ExtendedModulusSize);      u = a;      v = b;      for (;;) {         d0 = deg(u);         d1 = deg(v);         lc = LeadCoeff(v);         PlainRem(u, u, v, tmp);         swap(u, v);         d2 = deg(v);         if (d2 >= 0) {            power(lc, lc, d0-d2);            mul(res, res, lc);            if (d0 & d1 & 1) negate(res, res);         }         else {            if (d1 == 0) {               power(lc, lc, d0);               mul(res, res, lc);            }            else               clear(res);                    break;         }      }      rres = res;   }}void ResIterHalfGCD(ZZ_pXMatrix& M_out, ZZ_pX& U, ZZ_pX& V, long d_red,                    vec_ZZ_p& cvec, vec_long& dvec){   M_out(0,0).SetMaxLength(d_red);   M_out(0,1).SetMaxLength(d_red);   M_out(1,0).SetMaxLength(d_red);   M_out(1,1).SetMaxLength(d_red);   set(M_out(0,0));   clear(M_out(0,1));   clear(M_out(1,0)); set(M_out(1,1));   long goal = deg(U) - d_red;   if (deg(V) <= goal)      return;   ZZVec tmp(deg(U)+1, ZZ_pInfo->ExtendedModulusSize);   ZZ_pX Q, t(INIT_SIZE, d_red);   while (deg(V) > goal) {      append(cvec, LeadCoeff(V));      append(dvec, dvec[dvec.length()-1]-deg(U)+deg(V));      PlainDivRem(Q, U, U, V, tmp);      swap(U, V);      mul(t, Q, M_out(1,0));      sub(t, M_out(0,0), t);      M_out(0,0) = M_out(1,0);      M_out(1,0) = t;      mul(t, Q, M_out(1,1));      sub(t, M_out(0,1), t);      M_out(0,1) = M_out(1,1);      M_out(1,1) = t;   }}   void ResHalfGCD(ZZ_pXMatrix& M_out, const ZZ_pX& U, const ZZ_pX& V, long d_red,                vec_ZZ_p& cvec, vec_long& dvec){   if (IsZero(V) || deg(V) <= deg(U) - d_red) {      set(M_out(0,0));   clear(M_out(0,1));      clear(M_out(1,0)); set(M_out(1,1));       return;   }   long n = deg(U) - 2*d_red + 2;   if (n < 0) n = 0;   ZZ_pX U1, V1;   RightShift(U1, U, n);   RightShift(V1, V, n);   if (d_red <= NTL_ZZ_pX_HalfGCD_CROSSOVER) {       ResIterHalfGCD(M_out, U1, V1, d_red, cvec, dvec);      return;   }   long d1 = (d_red + 1)/2;   if (d1 < 1) d1 = 1;   if (d1 >= d_red) d1 = d_red - 1;   ZZ_pXMatrix M1;   ResHalfGCD(M1, U1, V1, d1, cvec, dvec);   mul(U1, V1, M1);   long d2 = deg(V1) - deg(U) + n + d_red;   if (IsZero(V1) || d2 <= 0) {      M_out = M1;      return;   }   ZZ_pX Q;   ZZ_pXMatrix M2;   append(cvec, LeadCoeff(V1));   append(dvec, dvec[dvec.length()-1]-deg(U1)+deg(V1));   DivRem(Q, U1, U1, V1);   swap(U1, V1);   ResHalfGCD(M2, U1, V1, d2, cvec, dvec);   ZZ_pX t(INIT_SIZE, deg(M1(1,1))+deg(Q)+1);   mul(t, Q, M1(1,0));   sub(t, M1(0,0), t);   swap(M1(0,0), M1(1,0));   swap(M1(1,0), t);   t.kill();   t.SetMaxLength(deg(M1(1,1))+deg(Q)+1);   mul(t, Q, M1(1,1));   sub(t, M1(0,1), t);   swap(M1(0,1), M1(1,1));   swap(M1(1,1), t);   t.kill();   mul(M_out, M2, M1); }void ResHalfGCD(ZZ_pX& U, ZZ_pX& V, vec_ZZ_p& cvec, vec_long& dvec){   long d_red = (deg(U)+1)/2;   if (IsZero(V) || deg(V) <= deg(U) - d_red) {      return;   }   long du = deg(U);   long d1 = (d_red + 1)/2;   if (d1 < 1) d1 = 1;   if (d1 >= d_red) d1 = d_red - 1;   ZZ_pXMatrix M1;   ResHalfGCD(M1, U, V, d1, cvec, dvec);   mul(U, V, M1);   long d2 = deg(V) - du + d_red;   if (IsZero(V) || d2 <= 0) {      return;   }   M1(0,0).kill();   M1(0,1).kill();   M1(1,0).kill();   M1(1,1).kill();   ZZ_pX Q;   append(cvec, LeadCoeff(V));   append(dvec, dvec[dvec.length()-1]-deg(U)+deg(V));   DivRem(Q, U, U, V);   swap(U, V);   ResHalfGCD(M1, U, V, d2, cvec, dvec);   mul(U, V, M1); }void resultant(ZZ_p& rres, const ZZ_pX& u, const ZZ_pX& v){   if (deg(u) <= NTL_ZZ_pX_GCD_CROSSOVER || deg(v) <= NTL_ZZ_pX_GCD_CROSSOVER) {       PlainResultant(rres, u, v);      return;   }   ZZ_pX u1, v1;   u1 = u;   v1 = v;   ZZ_p res, t;   set(res);   if (deg(u1) == deg(v1)) {      rem(u1, u1, v1);      swap(u1, v1);      if (IsZero(v1)) {         clear(rres);         return;      }      power(t, LeadCoeff(u1), deg(u1) - deg(v1));      mul(res, res, t);      if (deg(u1) & 1)         negate(res, res);   }   else if (deg(u1) < deg(v1)) {      swap(u1, v1);      if (deg(u1) & deg(v1) & 1)         negate(res, res);   }   // deg(u1) > deg(v1) && v1 != 0   vec_ZZ_p cvec;   vec_long  dvec;   cvec.SetMaxLength(deg(v1)+2);   dvec.SetMaxLength(deg(v1)+2);   append(cvec, LeadCoeff(u1));   append(dvec, deg(u1));   while (deg(u1) > NTL_ZZ_pX_GCD_CROSSOVER && !IsZero(v1)) {       ResHalfGCD(u1, v1, cvec, dvec);      if (!IsZero(v1)) {         append(cvec, LeadCoeff(v1));         append(dvec, deg(v1));         rem(u1, u1, v1);         swap(u1, v1);      }   }   if (IsZero(v1) && deg(u1) > 0) {      clear(rres);      return;   }   long i, l;   l = dvec.length();   if (deg(u1) == 0) {      // we went all the way...      for (i = 0; i <= l-3; i++) {         power(t, cvec[i+1], dvec[i]-dvec[i+2]);         mul(res, res, t);         if (dvec[i] & dvec[i+1] & 1)            negate(res, res);      }      power(t, cvec[l-1], dvec[l-2]);      mul(res, res, t);   }   else {      for (i = 0; i <= l-3; i++) {         power(t, cvec[i+1], dvec[i]-dvec[i+2]);         mul(res, res, t);         if (dvec[i] & dvec[i+1] & 1)            negate(res, res);      }      power(t, cvec[l-1], dvec[l-2]-deg(v1));      mul(res, res, t);      if (dvec[l-2] & dvec[l-1] & 1)         negate(res, res);      PlainResultant(t, u1, v1);      mul(res, res, t);   }   rres = res;}void NormMod(ZZ_p& x, const ZZ_pX& a, const ZZ_pX& f){   if (deg(f) <= 0 || deg(a) >= deg(f))       Error("norm: bad args");   if (IsZero(a)) {      clear(x);      return;   }   ZZ_p t;   resultant(t, f, a);   if (!IsOne(LeadCoeff(f))) {      ZZ_p t1;      power(t1, LeadCoeff(f), deg(a));      inv(t1, t1);      mul(t, t, t1);   }   x = t;}NTL_END_IMPL

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成人免费在线观看| 91极品美女在线| 日本视频一区二区三区| 亚洲欧洲精品天堂一级| 久久久久久久久一| 欧洲亚洲精品在线| 欧美日韩在线播| 欧美在线三级电影| 在线免费精品视频| 欧美日韩成人综合| 日韩欧美在线综合网| 欧美在线制服丝袜| 欧美一区二区三区免费大片| 成人免费毛片嘿嘿连载视频| 国产精品一区二区x88av| 国产一区二区三区高清播放| 国产成人8x视频一区二区 | 国产亚洲精品aa| 欧美激情综合在线| 久久久久久久av麻豆果冻| 国产精品美女一区二区在线观看| 亚洲另类色综合网站| 国产丝袜欧美中文另类| 亚洲天堂福利av| 亚洲成人资源网| 国产a视频精品免费观看| 91福利在线看| 国产精品免费视频一区| 午夜精品成人在线| 99免费精品在线观看| 日韩欧美一区二区久久婷婷| 在线视频国内自拍亚洲视频| 欧美一区二区三区视频在线 | 视频一区二区欧美| 99综合电影在线视频| 91精品国产高清一区二区三区| 国产欧美精品一区| 久热成人在线视频| 欧美曰成人黄网| 国产精品二区一区二区aⅴ污介绍| 亚洲妇女屁股眼交7| 成人一区二区三区在线观看| 欧美一级欧美三级在线观看| 一区二区高清视频在线观看| 国产精品一品视频| 日韩欧美一二三区| 亚洲mv在线观看| 国产精品91xxx| 欧美日韩aaa| 日本一区二区成人在线| 久久精品99久久久| 欧美中文字幕一区二区三区亚洲| 亚洲人成亚洲人成在线观看图片| 国产一区二区精品久久99| 91精品国产91热久久久做人人| 亚洲综合成人在线视频| 欧美怡红院视频| 蜜桃视频在线观看一区| 精品国产sm最大网站| 成人app软件下载大全免费| 欧美国产日韩在线观看| 色综合网色综合| 韩国毛片一区二区三区| 香蕉乱码成人久久天堂爱免费| 欧美不卡123| 欧美性受xxxx黑人xyx性爽| 精品亚洲aⅴ乱码一区二区三区| 国产精品久久久久久久久久免费看| 91国内精品野花午夜精品| 蜜桃视频一区二区| 亚洲国产精品一区二区尤物区| 欧美mv日韩mv亚洲| 欧美三级乱人伦电影| 大美女一区二区三区| 国产激情一区二区三区| 麻豆中文一区二区| 日韩高清在线一区| 欧美大胆一级视频| 久久精品一区八戒影视| 欧美日韩一区成人| 欧美午夜寂寞影院| 欧美日韩另类一区| 欧美精品 日韩| 91精品在线观看入口| 日韩一级二级三级| 欧美喷水一区二区| 欧美一区二区国产| 欧美一区二区福利在线| 日韩午夜av一区| 中文字幕精品三区| 最近日韩中文字幕| 亚洲国产日韩一区二区| 亚洲电影欧美电影有声小说| 久久国产剧场电影| 成人深夜视频在线观看| 成人爱爱电影网址| 欧美日韩不卡在线| 国产视频一区二区在线| 亚洲视频一区二区免费在线观看| 亚洲精品伦理在线| 日韩和欧美的一区| 成人国产亚洲欧美成人综合网| 91福利在线观看| 久久女同精品一区二区| 亚洲成人资源网| 国产91丝袜在线播放九色| 欧美日韩一级视频| 国产精品高潮呻吟| 国产成人免费在线视频| 欧美在线观看视频在线| 国产精品系列在线| 韩国一区二区在线观看| 51精品国自产在线| 中文字幕一区三区| 国产伦精一区二区三区| 91精品久久久久久久久99蜜臂| 亚洲国产精品精华液2区45| 久久国产精品72免费观看| 欧美亚男人的天堂| 亚洲午夜电影在线| 欧美乱熟臀69xxxxxx| 亚洲男人的天堂在线aⅴ视频| 国产成人精品免费| 26uuu色噜噜精品一区| 午夜伦理一区二区| 欧美日韩国产精品成人| 天堂成人国产精品一区| 91久久精品网| 五月开心婷婷久久| 精品日产卡一卡二卡麻豆| 国产伦精一区二区三区| 日韩免费观看高清完整版在线观看| 亚洲国产精品久久艾草纯爱| 欧美中文字幕不卡| 日日夜夜精品视频天天综合网| 欧美精品99久久久**| 亚洲午夜久久久久| 欧美精品日韩精品| 丝袜脚交一区二区| 欧美精品一区二区三区蜜桃| 国产成人一区二区精品非洲| 中文字幕一区二区三区在线观看 | 91精品国产综合久久福利软件| 亚洲r级在线视频| 日韩写真欧美这视频| 国产盗摄视频一区二区三区| 亚洲欧美日韩中文播放| 国产伦精品一区二区三区免费迷 | 亚洲尤物视频在线| 欧美xxxxx牲另类人与| 99久久久无码国产精品| 日本中文字幕一区| 亚洲男同性恋视频| 欧美极品xxx| 欧美疯狂做受xxxx富婆| av高清久久久| 国产麻豆91精品| 性久久久久久久| 亚洲一区二区偷拍精品| 国产农村妇女精品| 久久久精品日韩欧美| 日韩欧美国产三级| 日韩精品一区二区三区在线观看 | 亚洲欧美日韩小说| 国产精品区一区二区三区 | 国产伦理精品不卡| 九色|91porny| 国产一区二区在线视频| 午夜欧美视频在线观看| 五月婷婷另类国产| 日本不卡高清视频| 欧美aaa在线| 激情综合色综合久久| 国产曰批免费观看久久久| 免费看欧美女人艹b| 麻豆91在线观看| 国产精品91一区二区| 国产剧情一区在线| 99riav久久精品riav| 欧美专区亚洲专区| 精品国精品国产尤物美女| 精品少妇一区二区三区视频免付费 | 26uuu亚洲| 亚洲人123区| 免费欧美在线视频| 国产高清视频一区| 欧美狂野另类xxxxoooo| 日韩一区二区三| 亚洲欧洲精品一区二区三区| 亚洲第一成年网| 国产91丝袜在线播放0| 欧美撒尿777hd撒尿| 久久久国产午夜精品| 一区二区三区自拍| 国产乱码精品一品二品| 欧美色爱综合网| 国产精品久久影院| 激情久久久久久久久久久久久久久久| 国产麻豆91精品| 日韩一区国产二区欧美三区|