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; |
|
|
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) |
{ |
{ |
|
|
} |
} |
|
|
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 */ |
|
|
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 */ |
|
|
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; |
} |
} |