void BuildIrred(GF2X& f, long n) { if (n <= 0) Error("BuildIrred: n must be positive"); if (NTL_OVERFLOW(n, 1, 0)) Error("overflow in BuildIrred"); if (n == 1) { SetX(f); return; } GF2X g; _ntl_ulong i; i = 0; do { ConvertBits(g, 2*i+1); SetCoeff(g, n); i++; } while (!IterIrredTest(g)); f = g; }
NTL_CLIENT #define NO_CARRY 0 #define CARRY 1 /////////////////////////////////////////////////////////////////////////// // return a modulus appropriate for F_q=F_{p^d} void get_modulus(zz_pX& pi, int p, int d) { zz_p::init(p); SetX(pi); pi <<= d-1; while (IterIrredTest(pi) == 0 && inc(pi,d-1) == 0) ; assert(IterIrredTest(pi) == 1 && deg(pi) == d); }
static void BuildPrimePowerIrred(ZZ_pEX& f, long q, long e) { long n = power(q, e); do { random(f, n); SetCoeff(f, n); } while (!IterIrredTest(f)); }
static long FindTrinom(long n) { if (n < 2) Error("tri--bad n"); long k; for (k = 1; k <= n/2; k++) if (IterIrredTest(1 + GF2X(k,1) + GF2X(n,1))) return k; return 0; }
static long FindPent(long n, long& kk2, long& kk1) { if (n < 4) Error("pent--bad n"); long k1, k2, k3; for (k3 = 3; k3 < n; k3++) for (k2 = 2; k2 < k3; k2++) for (k1 = 1; k1 < k2; k1++) if (IterIrredTest(1+GF2X(k1,1)+GF2X(k2,1)+GF2X(k3,1)+GF2X(n,1))) { kk2 = k2; kk1 = k1; return k3; } return 0; }
void BuildIrred(ZZ_pEX& f, long n) { if (n <= 0) LogicError("BuildIrred: n must be positive"); if (n == 1) { SetX(f); return; } ZZ_pEX g; do { random(g, n); SetCoeff(g, n); } while (!IterIrredTest(g)); f = g; }
void BuildIrred(GF2EX& f, long n) { if (n <= 0) Error("BuildIrred: n must be positive"); if (NTL_OVERFLOW(n, 1, 0)) Error("overflow in BuildIrred"); if (n == 1) { SetX(f); return; } GF2EX g; do { random(g, n); SetCoeff(g, n); } while (!IterIrredTest(g)); f = g; }