[BACK]Return to galois.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / pari-2.2 / src / modules

Diff for /OpenXM_contrib/pari-2.2/src/modules/Attic/galois.c between version 1.1 and 1.2

version 1.1, 2001/10/02 11:17:11 version 1.2, 2002/09/11 07:27:05
Line 30  typedef POBJ RESOLVANTE;
Line 30  typedef POBJ RESOLVANTE;
   
 static long isin_G_H(GEN po, GEN *r, long n1, long n2);  static long isin_G_H(GEN po, GEN *r, long n1, long n2);
   
 static long N,CAR,PREC,PRMAX,TSCHMAX,coeff[9][10];  static long N,EVEN,PREC,PRMAX,TSCHMAX,coeff[9][10];
 static char SID[] = { 0,1,2,3,4,5,6,7,8,9,10,11 };  static char SID[] = { 0,1,2,3,4,5,6,7,8,9,10,11 };
 static char* str_base = GPDATADIR;  static char* str_base = GPDATADIR;
   
 static long par_N, *par_vec;  static long *par_vec;
   
   /* k-1 entries filled so far
    * m = maximal allowed value, n = sum to reach with remaining elements */
 static void  static void
 do_par(long k, long n, long m)  do_par(long k, long n, long m)
 {  {
   long i;    long i;
     if (n <= 0)
   if (n<=0)  
   {    {
     GEN p1 = new_chunk(par_N+1);      GEN p1 = cgetg(k, t_VECSMALL);
     for (i=1; i<k     ; i++) p1[i] = par_vec[i];      for (i=1; i<k; i++) p1[i] = par_vec[i];
     for (   ; i<=par_N; i++) p1[i] = 0;  
     return;      return;
   }    }
   if (n<m) m=n;    if (n < m) m = n;
   for (i=1; i<=m; i++)    for (i=1; i<=m; i++)
   {    {
     par_vec[k] = i;      par_vec[k] = i;
Line 56  do_par(long k, long n, long m)
Line 56  do_par(long k, long n, long m)
   }    }
 }  }
   
 /* compute the partitions of m. T[0][0] = p(m) */  /* compute the partitions of n, as decreasing t_VECSMALLs */
 static long **  static GEN
 partitions(long n)  partitions(long n)
 {  {
   long av,av1,i, j = 1, l = n+1;    gpmem_t av, av1;
   GEN T;    long i, j, lT;
     GEN T, P;
   
   par_vec = new_chunk(l); par_N = n;    par_vec = new_chunk(n+1);
   l = l*sizeof(long);    av = avma; do_par(1,n,n);
   av = avma; do_par(1,n,n); av1 = avma;    av1= avma;
   T = new_chunk((av-av1)/l + 1);    for (lT=1, P = (GEN)av1; P < (GEN)av; P += lg(P)) lT++;
   for (i=av-l; i>=av1; i-=l) T[j++]=i;    T = cgetg(lT, t_VEC);
     for (j=lT, P = (GEN)av1; P < (GEN)av; P += lg(P)) T[--j] = (long)P;
   
   if (DEBUGLEVEL > 7)    if (DEBUGLEVEL > 7)
   {    {
     fprintferr("Partitions of %ld: p(%ld) = %ld\n",n,n,j-1);      fprintferr("Partitions of %ld: p(%ld) = %ld\n",n,n,lT-1);
     for (i=1; i<j; i++)      for (i=1; i<lT; i++) fprintferr("i = %ld: %Z\n",i,(GEN)T[i]);
     {  
       fprintferr("i = %ld: ",i);  
       for (l=1; l<=n; l++)  
         fprintferr("%ld ",((long**)T)[i][l]);  
       fprintferr("\n"); flusherr();  
     }  
   }    }
   T[0] = lgeti(1); ((long**)T)[0][0] = j-1;    return T;
   return (long**)T;  
 }  }
   
 /* affect to the permutation x the N arguments that follow */  /* affect to the permutation x the N arguments that follow */
Line 106  _gr(long len,...)
Line 101  _gr(long len,...)
   va_end(args); return x;    va_end(args); return x;
 }  }
   
   /* return a VECSMALL of length l from the arguments (for galoismodulo11) */
   static GEN
   _typ(long l,...)
   {
     va_list args;
     long i;
     GEN x = cgetg(l+1, t_VECSMALL);
   
     va_start(args,l);
     for (i=1; i<=l; i++) x[i] = va_arg(args,int);
     va_end(args); return x;
   }
   
 /* create a permutation with the N arguments of the function */  /* create a permutation with the N arguments of the function */
 static PERM  static PERM
 _cr(char a,...)  _cr(char a,...)
Line 137  printperm(PERM perm)
Line 145  printperm(PERM perm)
   fprintferr(" )\n");    fprintferr(" )\n");
 }  }
   
 /* ranger dans l'ordre decroissant (quicksort) */  
 static void  
 ranger(long *t, long n)  
 {  
   long tpro,l,r,i,j;  
   
   l=1+n/2; r=n; tpro=t[1];  
   for(;;)  
   {  
     if (l>1) { l--; tpro=t[l]; }  
     else  
     {  
       tpro=t[r]; t[r]=t[1]; r--;  
       if (r==1) { t[1]=tpro; return; }  
     }  
     i=l;  
     for (j=i<<1; j<=r; j<<=1)  
     {  
       if (j < r && t[j] > t[j+1]) j++;  
       if (t[j] >= tpro) break;  
       t[i] = t[j]; i=j;  
     }  
     t[i]=tpro;  
   }  
 }  
   
 /* 0 if t1=t2, -1 if t1<t2, 1 if t1>t2 */  
 static long  
 compareupletlong(long *t1,long *t2)  
 {  
   long i;  
   for (i=1; i<=N; i++)  
     if (t1[i]!=t2[i]) return (t1[i] < t2[i])? -1: 1;  
   return 0;  
 }  
   
 /* return i if typ = TYP[i], 0 otherwise */  /* return i if typ = TYP[i], 0 otherwise */
 static long  static long
 numerotyp(long **TYP, long *galtyp)  numerotyp(GEN TYP, GEN galtyp)
 {  {
   long i, nb = TYP[0][0];    long i, nb = lg(TYP);
   for (i=1; i<=nb; i++)    for (i=1; i<nb; i++)
     if (!compareupletlong(galtyp,TYP[i])) return i;      if (gegal(galtyp,(GEN)TYP[i])) return i;
   return 0;    return 0;
 }  }
   
Line 198  rayergroup11(long num, long *gr)
Line 170  rayergroup11(long num, long *gr)
 {  {
   long r = 0;    long r = 0;
   
   if (CAR)    if (EVEN)
     switch(num)      switch(num)
     {      {
       case 2: case 5:        case 2: case 5:
Line 224  rayergroup(long **GR, long num, long *gr)
Line 196  rayergroup(long **GR, long num, long *gr)
   
   if (!GR) return rayergroup11(num,gr);    if (!GR) return rayergroup11(num,gr);
   nbgr = lg(GR); r = 0 ;    nbgr = lg(GR); r = 0 ;
   if (CAR)    if (EVEN)
   {    {
     for (i=1; i<nbgr; i++)      for (i=1; i<nbgr; i++)
       if (gr[i] && GR[i][0] < 0 && raye(GR[i],num)) { gr[i]=0; r++; }        if (gr[i] && GR[i][0] < 0 && raye(GR[i],num)) { gr[i]=0; r++; }
Line 238  rayergroup(long **GR, long num, long *gr)
Line 210  rayergroup(long **GR, long num, long *gr)
 }  }
   
 static long  static long
 galmodp(GEN pol, GEN dpol, long **TYP, long *gr, long **GR)  galmodp(GEN pol, GEN dpol, GEN TYP, long *gr, long **GR)
 {  {
   long p = 0, i,k,l,n,nbremain,dtyp[NMAX+1];    long p = 0, i,k,l,n,nbremain;
   byteptr d = diffptr;    byteptr d = diffptr;
   GEN p1;    GEN p1, dtyp;
   
   switch(N)    switch(N)
   {    {
     case  8: nbremain = CAR? 28: 22; break;      case  8: nbremain = EVEN? 28: 22; break;
     case  9: nbremain = CAR? 18: 16; break;      case  9: nbremain = EVEN? 18: 16; break;
     case 10: nbremain = CAR? 12: 33; break;      case 10: nbremain = EVEN? 12: 33; break;
     default: nbremain = CAR?  5:  3; break; /* case 11 */      default: nbremain = EVEN?  5:  3; break; /* case 11 */
   }    }
   
     dtyp = new_chunk(NMAX+1);
   k = gr[0]; for (i=1; i<k; i++) gr[i]=1;    k = gr[0]; for (i=1; i<k; i++) gr[i]=1;
   for (k=1; k<15; k++, d++)    for (k=1; k<15; k++)
   {    {
     p += *d; if (!*d) err(primer1);      NEXT_PRIME_VIADIFF_CHECK(p,d);
     if (smodis(dpol,p)) /* p does not divide dpol */      if (!smodis(dpol,p)) continue; /* p divides dpol */
     {  
       p1 = simplefactmod(pol,stoi(p));      p1 = simplefactmod(pol,stoi(p));
       p1 = (GEN)p1[1]; l = lg(p1);      p1 = (GEN)p1[1]; l = lg(p1);
       for (i=1; i<l ; i++) dtyp[i] = itos((GEN)(p1[l-i]));      for (i=1; i<l ; i++) dtyp[i] = itos((GEN)(p1[l-i]));
       for (   ; i<=N; i++) dtyp[i] = 0;      dtyp[0] = evaltyp(t_VECSMALL)|evallg(l);
       ranger(dtyp,N); n = numerotyp(TYP,dtyp);      n = numerotyp(TYP,dtyp);
       if (!n) return 1; /* only for N=11 */      if (!n) return 1; /* only for N=11 */
       nbremain -= rayergroup(GR,n,gr);      nbremain -= rayergroup(GR,n,gr);
       if (nbremain==1) return 1;      if (nbremain==1) return 1;
     }  
   }    }
   return 0;    return 0;
 }  }
Line 315  getpreci(GEN *r)
Line 287  getpreci(GEN *r)
 static void  static void
 new_pol(GEN *r, long *a, long d)  new_pol(GEN *r, long *a, long d)
 {  {
   long av,i,j;    long i, j;
     gpmem_t av;
   GEN x, p1;    GEN x, p1;
   for (i=1; i<=N; i++)    for (i=1; i<=N; i++)
   {    {
Line 328  new_pol(GEN *r, long *a, long d)
Line 301  new_pol(GEN *r, long *a, long d)
 static void  static void
 rangeroots(GEN newr, GEN oldr)  rangeroots(GEN newr, GEN oldr)
 {  {
   long av = avma,i,j,k,z[NMAX+1],t[NMAX+1];    long i, j, k, z[NMAX+1], t[NMAX+1];
     gpmem_t av = avma;
   GEN diff,diff0;    GEN diff,diff0;
   
   k = 0; /* gcc -Wall */    k = 0; /* gcc -Wall */
Line 776  extern GEN ZX_caract_sqf(GEN A, GEN B, long *lambda, l
Line 750  extern GEN ZX_caract_sqf(GEN A, GEN B, long *lambda, l
 static void  static void
 tschirn(GEN po, GEN *r, long pr)  tschirn(GEN po, GEN *r, long pr)
 {  {
   long a[NMAX],i,k, v = varn(po), d = TSCHMAX + 1;    long i,k, v = varn(po), d = TSCHMAX + 1;
   GEN h,u;    GEN a,h,u;
   
   if (d >= N) err(talker,"degree too large in tschirn");    if (d >= N) err(talker,"degree too large in tschirn");
   if (DEBUGLEVEL)    if (DEBUGLEVEL)
     fprintferr("\n$$$$$ Tschirnhaus transformation of degree %ld: $$$$$\n",d);      fprintferr("\n$$$$$ Tschirnhaus transformation of degree %ld: $$$$$\n",d);
   
     a = new_chunk(d);
   do    do
   {    {
     for (i=0; i<d; i++) a[i] = ((mymyrand()>>4) & 7) + 1;      for (i=0; i<d; i++) a[i] = ((mymyrand()>>4) & 7) + 1;
Line 833  static GEN
Line 808  static GEN
 is_int(GEN g)  is_int(GEN g)
 {  {
   GEN gint,p1;    GEN gint,p1;
   long av;    gpmem_t av;
   
   if (typ(g) == t_COMPLEX)    if (typ(g) == t_COMPLEX)
   {    {
Line 847  is_int(GEN g)
Line 822  is_int(GEN g)
 }  }
   
 static PERM  static PERM
 isin_end(PERM S, PERM uu, PERM s0, GEN gpol, long av1)  isin_end(PERM S, PERM uu, PERM s0, GEN gpol, gpmem_t av1)
 {  {
   PERM vv = permmul(S,uu), ww = permmul(vv,s0);    PERM vv = permmul(S,uu), ww = permmul(vv,s0);
   
Line 864  isin_end(PERM S, PERM uu, PERM s0, GEN gpol, long av1)
Line 839  isin_end(PERM S, PERM uu, PERM s0, GEN gpol, long av1)
 static PERM  static PERM
 check_isin(GEN po,GEN *r,long nbm,long nbv, POBJ a, POBJ tau, POBJ ss, PERM s0)  check_isin(GEN po,GEN *r,long nbm,long nbv, POBJ a, POBJ tau, POBJ ss, PERM s0)
 {  {
   long pr = PREC, av1 = avma, av2,nogr,nocos,init,i,j,k,l,d,nrm,nri,sp;    long pr = PREC, nogr, nocos, init, i, j, k, l, d, nrm, nri, sp;
     gpmem_t av1 = avma, av2;
   long nbgr,nbcos,nbracint,nbrac,lastnbri,lastnbrm;    long nbgr,nbcos,nbracint,nbrac,lastnbri,lastnbrm;
   static long numi[M],numj[M],lastnum[M],multi[M],norac[M],lastnor[M];    static long numi[M],numj[M],lastnum[M],multi[M],norac[M],lastnor[M];
   GEN rr,ro,roint,racint[M];    GEN rr,ro,roint,racint[M];
Line 996  galoisprim8(GEN po, GEN *r)
Line 972  galoisprim8(GEN po, GEN *r)
   
 /* PRIM_8_1: */  /* PRIM_8_1: */
   rep=isin_G_H(po,r,50,43);    rep=isin_G_H(po,r,50,43);
   if (rep) return CAR? 37: 43;    if (rep) return EVEN? 37: 43;
 /* PRIM_8_2: */  /* PRIM_8_2: */
   if (!CAR) return 50;    if (!EVEN) return 50;
 /* PRIM_8_3: */  /* PRIM_8_3: */
   rep=isin_G_H(po,r,49,48);    rep=isin_G_H(po,r,49,48);
   if (!rep) return 49;    if (!rep) return 49;
Line 1319  closure8(GEN po)
Line 1295  closure8(GEN po)
   GEN r[NMAX];    GEN r[NMAX];
   
   r[0] = myroots(po,PRMAX); preci(r,PREC);    r[0] = myroots(po,PRMAX); preci(r,PREC);
   if (!CAR)    if (!EVEN)
   {    {
   /* CLOS_8_1: */    /* CLOS_8_1: */
     rep=isin_G_H(po,r,50,47);      rep=isin_G_H(po,r,50,47);
Line 1507  data8(long n1, long n2, GROUP *t)
Line 1483  data8(long n1, long n2, GROUP *t)
 static long  static long
 galoismodulo8(GEN pol, GEN dpol)  galoismodulo8(GEN pol, GEN dpol)
 {  {
   long av = avma, res, gr[51];    long res, gr[51];
   long **TYP = partitions(8), **GR = (long**)cgeti(49);    gpmem_t av = avma;
     long **GR = (long**)cgeti(49);
     GEN TYP = partitions(8);
   
 /* List of possible types in group j: GR[j][0] = #GR[j] if  /* List of possible types in group j: GR[j][0] = #GR[j] if
  * the group is odd, - #GR[j] if even */   * the group is odd, - #GR[j] if even */
Line 1563  galoismodulo8(GEN pol, GEN dpol)
Line 1541  galoismodulo8(GEN pol, GEN dpol)
   
   gr[0]=51; res = galmodp(pol,dpol,TYP,gr,GR);    gr[0]=51; res = galmodp(pol,dpol,TYP,gr,GR);
   avma=av; if (!res) return 0;    avma=av; if (!res) return 0;
   return CAR? 49: 50;    return EVEN? 49: 50;
 }  }
   
 /* BIBLIOTHEQUE POUR LE DEGRE 9 */  /* BIBLIOTHEQUE POUR LE DEGRE 9 */
Line 1572  galoisprim9(GEN po, GEN *r)
Line 1550  galoisprim9(GEN po, GEN *r)
 {  {
   long rep;    long rep;
   
   if (!CAR)    if (!EVEN)
   {    {
   /* PRIM_9_1: */    /* PRIM_9_1: */
     rep=isin_G_H(po,r,34,26);      rep=isin_G_H(po,r,34,26);
Line 1727  closure9(GEN po)
Line 1705  closure9(GEN po)
   GEN r[NMAX];    GEN r[NMAX];
   
   r[0] = myroots(po,PRMAX); preci(r,PREC);    r[0] = myroots(po,PRMAX); preci(r,PREC);
   if (!CAR)    if (!EVEN)
   {    {
   /* CLOS_9_1: */    /* CLOS_9_1: */
     rep=isin_G_H(po,r,34,31);      rep=isin_G_H(po,r,34,31);
Line 1793  data9(long n1, long n2, GROUP *t)
Line 1771  data9(long n1, long n2, GROUP *t)
 static long  static long
 galoismodulo9(GEN pol, GEN dpol)  galoismodulo9(GEN pol, GEN dpol)
 {  {
   long av = avma, res, gr[35];    long res, gr[35];
   long **TYP = partitions(9), **GR = (long**) cgeti(33);    gpmem_t av = avma;
     long **GR = (long**) cgeti(33);
     GEN TYP = partitions(9);
   
   /* 42 TYPES ORDONNES CROISSANT (T[1],...,T[30])*/    /* 42 TYPES ORDONNES CROISSANT (T[1],...,T[30])*/
   
Line 1833  galoismodulo9(GEN pol, GEN dpol)
Line 1813  galoismodulo9(GEN pol, GEN dpol)
   
   gr[0]=35; res = galmodp(pol,dpol,TYP,gr,GR);    gr[0]=35; res = galmodp(pol,dpol,TYP,gr,GR);
   avma=av; if (!res) return 0;    avma=av; if (!res) return 0;
   return CAR? 33: 34;    return EVEN? 33: 34;
 }  }
   
 /* BIBLIOTHEQUE POUR LE DEGRE 10 */  /* BIBLIOTHEQUE POUR LE DEGRE 10 */
Line 1841  static long
Line 1821  static long
 galoisprim10(GEN po, GEN *r)  galoisprim10(GEN po, GEN *r)
 {  {
   long rep;    long rep;
   if (CAR)    if (EVEN)
   {    {
   /* PRIM_10_1: */    /* PRIM_10_1: */
     rep=isin_G_H(po,r,44,31);      rep=isin_G_H(po,r,44,31);
Line 2151  closure10(GEN po)
Line 2131  closure10(GEN po)
   GEN r[NMAX];    GEN r[NMAX];
   
   r[0] = myroots(po,PRMAX); preci(r,PREC);    r[0] = myroots(po,PRMAX); preci(r,PREC);
   if (CAR)    if (EVEN)
   {    {
   /* CLOS_10_1: */    /* CLOS_10_1: */
     rep=isin_G_H(po,r,44,42);      rep=isin_G_H(po,r,44,42);
Line 2243  data10(long n1,long n2,GROUP *t)
Line 2223  data10(long n1,long n2,GROUP *t)
 static long  static long
 galoismodulo10(GEN pol, GEN dpol)  galoismodulo10(GEN pol, GEN dpol)
 {  {
   long av = avma, res, gr[46];    long res, gr[46];
   long **TYP = partitions(10), **GR = (long**) cgeti(45);    gpmem_t av = avma;
     long **GR = (long**) cgeti(45);
     GEN TYP = partitions(10);
   
   GR[ 1]= _gr(  4, 1,6,30,42);    GR[ 1]= _gr(  4, 1,6,30,42);
   GR[ 2]= _gr(  3, 1,6,30);    GR[ 2]= _gr(  3, 1,6,30);
Line 2293  galoismodulo10(GEN pol, GEN dpol)
Line 2275  galoismodulo10(GEN pol, GEN dpol)
   
   gr[0]=46; res = galmodp(pol,dpol,TYP,gr,GR);    gr[0]=46; res = galmodp(pol,dpol,TYP,gr,GR);
   avma=av; if (!res) return 0;    avma=av; if (!res) return 0;
   return CAR? 44: 45;    return EVEN? 44: 45;
 }  }
   
 /* BIBLIOTHEQUE POUR LE DEGRE 11 */  /* BIBLIOTHEQUE POUR LE DEGRE 11 */
Line 2305  closure11(GEN po)
Line 2287  closure11(GEN po)
   GEN r[NMAX];    GEN r[NMAX];
   
   r[0] = myroots(po,PRMAX); preci(r,PREC);    r[0] = myroots(po,PRMAX); preci(r,PREC);
   if (CAR)    if (EVEN)
   {    {
   /* EVEN_11_1: */    /* EVEN_11_1: */
     rep=isin_G_H(po,r,7,6);      rep=isin_G_H(po,r,7,6);
Line 2350  data11(long n1, GROUP *t)
Line 2332  data11(long n1, GROUP *t)
 static long  static long
 galoismodulo11(GEN pol, GEN dpol)  galoismodulo11(GEN pol, GEN dpol)
 {  {
   long av = avma, res, gr[6] = {0, 1,1,1,1,1};    long res, gr[6] = {0, 1, 1, 1, 1, 1};
   long **TYP = (long**) cgeti(9);    gpmem_t av = avma;
     GEN *TYP = (GEN*)cgetg(EVEN? 9: 6, t_VEC);
   
   TYP[0] = new_chunk(1);    TYP[1] = _typ(1, 11);
   TYP[1] = _gr(11, 11,0,0,0,0,0,0,0,0,0,0);    if (EVEN)
   if (CAR)  
   {    {
     TYP[2] = _gr(11, 8,2,1,0,0,0,0,0,0,0,0);      TYP[2] = _typ(3, 8,2,1);
     TYP[3] = _gr(11, 6,3,2,0,0,0,0,0,0,0,0);      TYP[3] = _typ(3, 6,3,2);
     TYP[4] = _gr(11, 5,5,1,0,0,0,0,0,0,0,0);      TYP[4] = _typ(3, 5,5,1);
     TYP[5] = _gr(11, 4,4,1,1,1,0,0,0,0,0,0);      TYP[5] = _typ(5, 4,4,1,1,1);
     TYP[6] = _gr(11, 3,3,3,1,1,0,0,0,0,0,0);      TYP[6] = _typ(5, 3,3,3,1,1);
     TYP[7] = _gr(11, 2,2,2,2,1,1,1,0,0,0,0);      TYP[7] = _typ(7, 2,2,2,2,1,1,1);
     TYP[8] = _gr(11, 1,1,1,1,1,1,1,1,1,1,1);      TYP[8] = _typ(11, 1,1,1,1,1,1,1,1,1,1,1);
     TYP[0][0] = 8;  
   }    }
   else    else
   {    {
     TYP[2] = _gr(11,10,1,0,0,0,0,0,0,0,0,0);      TYP[2] = _typ(2, 10,1);
     TYP[3] = _gr(11, 5,5,1,0,0,0,0,0,0,0,0);      TYP[3] = _typ(3, 5,5,1);
     TYP[4] = _gr(11, 2,2,2,2,2,1,0,0,0,0,0);      TYP[4] = _typ(6, 2,2,2,2,2,1);
     TYP[5] = _gr(11, 1,1,1,1,1,1,1,1,1,1,1);      TYP[5] = _typ(11, 1,1,1,1,1,1,1,1,1,1,1);
     TYP[0][0] = 5;  
   }    }
   res = galmodp(pol,dpol,TYP,gr,NULL);    res = galmodp(pol,dpol,(GEN)TYP,gr,NULL);
   avma=av; if (!res) return 0;    avma=av; if (!res) return 0;
   return CAR? 7: 8;    return EVEN? 7: 8;
 }  }
   
 /* return 1 iff we need to read a resolvent */  /* return 1 iff we need to read a resolvent */
Line 2477  GEN
Line 2457  GEN
 galoisbig(GEN pol, long prec)  galoisbig(GEN pol, long prec)
 {  {
   GEN dpol, res = cgetg(4,t_VEC);    GEN dpol, res = cgetg(4,t_VEC);
   long *tab,t, av = avma;    long *tab, t;
     gpmem_t av = avma;
   long tab8[]={0,    long tab8[]={0,
     8,8,8,8,8,16,16,16,16,16, 16,24,24,24,32,32,32,32,32,32,      8,8,8,8,8,16,16,16,16,16, 16,24,24,24,32,32,32,32,32,32,
     32,32,48,48,56,64,64,64,64,64, 64,96,96,96,128,168,168,192,192,192,      32,32,48,48,56,64,64,64,64,64, 64,96,96,96,128,168,168,192,192,192,
Line 2491  galoisbig(GEN pol, long prec)
Line 2472  galoisbig(GEN pol, long prec)
     1920,1920,1920,3840,7200,14400,14400,28800,1814400,3628800};      1920,1920,1920,3840,7200,14400,14400,28800,1814400,3628800};
   long tab11[]={0, 11,22,55,110,660,7920,19958400,39916800};    long tab11[]={0, 11,22,55,110,660,7920,19958400,39916800};
   
   N = degpol(pol); dpol = discsr(pol); CAR = carreparfait(dpol);    N = degpol(pol); dpol = ZX_disc(pol); EVEN = carreparfait(dpol);
   prec += 2 * (MEDDEFAULTPREC-2);    prec += 2 * (MEDDEFAULTPREC-2);
   PREC = prec;    PREC = prec;
   if (DEBUGLEVEL)    if (DEBUGLEVEL)
   {    {
     fprintferr("Galoisbig (prec=%ld): reduced polynomial #1 = %Z\n",prec,pol);      fprintferr("Galoisbig (prec=%ld): reduced polynomial #1 = %Z\n",prec,pol);
     fprintferr("discriminant = %Z\n", dpol);      fprintferr("discriminant = %Z\n", dpol);
     fprintferr("%s group\n", CAR? "EVEN": "ODD"); flusherr();      fprintferr("%s group\n", EVEN? "EVEN": "ODD"); flusherr();
   }    }
   PRMAX = prec+5; TSCHMAX = 1; SID[0] = N;    PRMAX = prec+5; TSCHMAX = 1; SID[0] = N;
   switch(N)    switch(N)
Line 2524  galoisbig(GEN pol, long prec)
Line 2505  galoisbig(GEN pol, long prec)
   }    }
   avma = av;    avma = av;
   res[1]=lstoi(tab[t]);    res[1]=lstoi(tab[t]);
   res[2]=lstoi(CAR? 1 : -1);    res[2]=lstoi(EVEN? 1 : -1);
   res[3]=lstoi(t); return res;    res[3]=lstoi(t); return res;
 }  }

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.2

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>