@@ -413,7 +413,11 @@ randomElement (const CanonicalForm & F, const Variable & alpha, CFList & list,
413413static inline
414414Variable chooseExtension (const Variable & alpha)
415415{
416- zz_p::init (getCharacteristic ());
416+ if (fac_NTL_char != getCharacteristic ())
417+ {
418+ fac_NTL_char= getCharacteristic ();
419+ zz_p::init (getCharacteristic ());
420+ }
417421 zz_pX NTLIrredpoly;
418422 int i, m;
419423 // extension of F_p needed
@@ -439,7 +443,11 @@ static inline
439443void choose_extension (const int & d, const int & num_vars, Variable& beta)
440444{
441445 int p= getCharacteristic ();
442- zz_p::init (p);
446+ if (p != fac_NTL_char)
447+ {
448+ fac_NTL_char= p;
449+ zz_p::init (p);
450+ }
443451 zz_pX NTLirredpoly;
444452 // TODO: replace d by max_{i} (deg_x{i}(f))
445453 int i= (int ) (log ((double ) ipower (d + 1 , num_vars))/log ((double ) p));
@@ -1332,7 +1340,11 @@ CanonicalForm
13321340randomIrredpoly (int i, const Variable & x)
13331341{
13341342 int p= getCharacteristic ();
1335- zz_p::init (p);
1343+ if (fac_NTL_char != p)
1344+ {
1345+ fac_NTL_char= p;
1346+ zz_p::init (p);
1347+ }
13361348 zz_pX NTLirredpoly;
13371349 CanonicalForm CFirredpoly;
13381350 BuildIrred (NTLirredpoly, i + 1 );
@@ -1997,7 +2009,11 @@ gaussianElimFp (CFMatrix& M, CFArray& L)
19972009 delete dummy;
19982010#else
19992011 int p= getCharacteristic ();
2000- zz_p::init (p);
2012+ if (fac_NTL_char != p)
2013+ {
2014+ fac_NTL_char= p;
2015+ zz_p::init (p);
2016+ }
20012017 mat_zz_p *NTLN= convertFacCFMatrix2NTLmat_zz_p (*N);
20022018 long rk= gauss (*NTLN);
20032019
@@ -2027,7 +2043,11 @@ gaussianElimFq (CFMatrix& M, CFArray& L, const Variable& alpha)
20272043 for (int i= 0 ; i < L.size (); i++, j++)
20282044 (*N) (j, M.columns () + 1 )= L[i];
20292045 int p= getCharacteristic ();
2030- zz_p::init (p);
2046+ if (fac_NTL_char != p)
2047+ {
2048+ fac_NTL_char= p;
2049+ zz_p::init (p);
2050+ }
20312051 zz_pX NTLMipo= convertFacCF2NTLzzpX (getMipo (alpha));
20322052 zz_pE::init (NTLMipo);
20332053 mat_zz_pE *NTLN= convertFacCFMatrix2NTLmat_zz_pE (*N);
@@ -2068,7 +2088,11 @@ solveSystemFp (const CFMatrix& M, const CFArray& L)
20682088 long rk= nmod_mat_rref (dummy, FLINTN);
20692089#else
20702090 int p= getCharacteristic ();
2071- zz_p::init (p);
2091+ if (fac_NTL_char != p)
2092+ {
2093+ fac_NTL_char= p;
2094+ zz_p::init (p);
2095+ }
20722096 mat_zz_p *NTLN= convertFacCFMatrix2NTLmat_zz_p (*N);
20732097 long rk= gauss (*NTLN);
20742098#endif
@@ -2108,7 +2132,11 @@ solveSystemFq (const CFMatrix& M, const CFArray& L, const Variable& alpha)
21082132 for (int i= 0 ; i < L.size (); i++, j++)
21092133 (*N) (j, M.columns () + 1 )= L[i];
21102134 int p= getCharacteristic ();
2111- zz_p::init (p);
2135+ if (fac_NTL_char != p)
2136+ {
2137+ fac_NTL_char= p;
2138+ zz_p::init (p);
2139+ }
21122140 zz_pX NTLMipo= convertFacCF2NTLzzpX (getMipo (alpha));
21132141 zz_pE::init (NTLMipo);
21142142 mat_zz_pE *NTLN= convertFacCFMatrix2NTLmat_zz_pE (*N);
@@ -4593,7 +4621,11 @@ CanonicalForm EZGCD_P( const CanonicalForm & FF, const CanonicalForm & GG )
45934621 Variable v2;
45944622 if (p == 2 && d < 6 )
45954623 {
4596- zz_p::init (p);
4624+ if (fac_NTL_char != p)
4625+ {
4626+ fac_NTL_char= p;
4627+ zz_p::init (p);
4628+ }
45974629 bool primFail= false ;
45984630 Variable vBuf;
45994631 primElem= primitiveElement (a, vBuf, primFail);
@@ -4617,7 +4649,11 @@ CanonicalForm EZGCD_P( const CanonicalForm & FF, const CanonicalForm & GG )
46174649 }
46184650 else if ((p == 3 && d < 4 ) || ((p == 5 || p == 7 ) && d < 3 ))
46194651 {
4620- zz_p::init (p);
4652+ if (fac_NTL_char != p)
4653+ {
4654+ fac_NTL_char= p;
4655+ zz_p::init (p);
4656+ }
46214657 bool primFail= false ;
46224658 Variable vBuf;
46234659 primElem= primitiveElement (a, vBuf, primFail);
0 commit comments