source: git/factory/cf_irred.cc

spielwiese
Last change on this file was 8c73aaf, checked in by Hans Schoenemann <hannes@…>, 4 years ago
use flint, comment unused stuff
  • Property mode set to 100644
File size: 1.5 KB
Line 
1/* emacs edit mode for this file is -*- C++ -*- */
2
3
4#include "config.h"
5
6
7#include "cf_assert.h"
8
9#include "cf_defs.h"
10#include "canonicalform.h"
11#include "cf_algorithm.h"
12#include "cf_random.h"
13
14#ifdef HAVE_NTL
15#include "NTLconvert.h"
16#endif
17
18#ifdef HAVE_FLINT
19#include "FLINTconvert.h"
20#endif
21
22#if defined(HAVE_NTL) || defined(HAVE_FLINT)
23/// computes a random monic irreducible univariate polynomial in x over Fp of
24/// degree i via NTL/FLINT
25CanonicalForm
26randomIrredpoly (int i, const Variable & x)
27{
28  int p= getCharacteristic();
29  #ifdef HAVE_FLINT
30  nmod_poly_t Irredpoly;
31  nmod_poly_init(Irredpoly,p);
32  nmod_poly_randtest_monic_irreducible(Irredpoly, FLINTrandom, i+1);
33  CanonicalForm CFirredpoly=convertnmod_poly_t2FacCF(Irredpoly,x);
34  nmod_poly_clear(Irredpoly);
35  #elif defined(HAVE_NTL)
36  if (fac_NTL_char != p)
37  {
38    fac_NTL_char= p;
39    zz_p::init (p);
40  }
41  zz_pX NTLirredpoly;
42  BuildIrred (NTLirredpoly, i);
43  CanonicalForm CFirredpoly= convertNTLzzpX2CF (NTLirredpoly, x);
44  #else
45  factoryError("NTL/FLINT missing: randomIrredpoly");
46  #endif
47  return CFirredpoly;
48}
49#else
50static bool
51is_irreducible ( const CanonicalForm & f )
52{
53    CFFList F = factorize( f );
54    return F.length() == 1 && F.getFirst().exp() == 1;
55}
56
57CanonicalForm
58find_irreducible ( int deg, CFRandom & gen, const Variable & x )
59{
60    CanonicalForm result;
61    int i;
62    do {
63        result = power( x, deg );
64        for ( i = deg-1; i >= 0; i-- )
65            result += gen.generate() * power( x, i );
66    } while ( ! is_irreducible( result ) );
67    return result;
68}
69#endif
Note: See TracBrowser for help on using the repository browser.