version 1.14, 2001/10/09 01:36:06 |
version 1.15, 2002/03/15 02:52:09 |
|
|
* DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, |
* DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, |
* PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. |
* PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. |
* |
* |
* $OpenXM: OpenXM_contrib2/asir2000/builtin/gf.c,v 1.13 2001/09/03 07:56:19 noro Exp $ |
* $OpenXM: OpenXM_contrib2/asir2000/builtin/gf.c,v 1.14 2001/10/09 01:36:06 noro Exp $ |
*/ |
*/ |
#include "ca.h" |
#include "ca.h" |
#include "parse.h" |
#include "parse.h" |
Line 56 struct resf_dlist { |
|
Line 56 struct resf_dlist { |
|
|
|
int resf_degtest(int,int *,int,struct resf_dlist *); |
int resf_degtest(int,int *,int,struct resf_dlist *); |
void uhensel(P,NODE,int,int,NODE *); |
void uhensel(P,NODE,int,int,NODE *); |
|
void uhensel_incremental(P,NODE,int,int,int,NODE *); |
void resf_hensel(int,P,int,P *,ML *); |
void resf_hensel(int,P,int,P *,ML *); |
void resf_dtest(P,ML,int,int *,int *,DCP *); |
void resf_dtest(P,ML,int,int *,int *,DCP *); |
void resf_dtest_special(P,ML,int,int *,int *,DCP *); |
void resf_dtest_special(P,ML,int,int *,int *,DCP *); |
Line 75 void pwr_mod(P,P,V,P,int,N,P *); |
|
Line 76 void pwr_mod(P,P,V,P,int,N,P *); |
|
void rem_mod(P,P,V,P,int,P *); |
void rem_mod(P,P,V,P,int,P *); |
|
|
void Pnullspace(),Pgcda_mod(),Pftest(),Presfmain(),Ppwr_mod(),Puhensel(); |
void Pnullspace(),Pgcda_mod(),Pftest(),Presfmain(),Ppwr_mod(),Puhensel(); |
|
void Puhensel_incremental(); |
void Psfuhensel(); |
void Psfuhensel(); |
|
|
void Pnullspace_ff(); |
void Pnullspace_ff(); |
Line 98 struct ftab gf_tab[] = { |
|
Line 100 struct ftab gf_tab[] = { |
|
{"resfmain",Presfmain,4}, |
{"resfmain",Presfmain,4}, |
{"pwr_mod",Ppwr_mod,6}, |
{"pwr_mod",Ppwr_mod,6}, |
{"uhensel",Puhensel,4}, |
{"uhensel",Puhensel,4}, |
|
{"uhensel_incremental",Puhensel_incremental,5}, |
{"sfuhensel",Psfuhensel,4}, |
{"sfuhensel",Psfuhensel,4}, |
{0,0,0}, |
{0,0,0}, |
}; |
}; |
|
|
MKLIST(*rp,r); |
MKLIST(*rp,r); |
} |
} |
|
|
|
void Puhensel_incremental(arg,rp) |
|
NODE arg; |
|
LIST *rp; |
|
{ |
|
P f; |
|
NODE mfl,r; |
|
int mod,bound,start; |
|
|
|
f = (P)ARG0(arg); |
|
mfl = BDY((LIST)ARG1(arg)); |
|
mod = QTOS((Q)ARG2(arg)); |
|
start = QTOS((Q)ARG3(arg)); |
|
bound = QTOS((Q)ARG4(arg)); |
|
uhensel_incremental(f,mfl,mod,start,bound,&r); |
|
MKLIST(*rp,r); |
|
} |
|
|
void uhensel(f,mfl,mod,bound,rp) |
void uhensel(f,mfl,mod,bound,rp) |
P f; |
P f; |
NODE mfl; |
NODE mfl; |
|
|
v = VR(f); |
v = VR(f); |
for ( i = nf-1, top = 0; i >= 0; i-- ) { |
for ( i = nf-1, top = 0; i >= 0; i-- ) { |
lumtop(v,mod,bound,rlist->c[i],&s); |
lumtop(v,mod,bound,rlist->c[i],&s); |
|
MKNODE(t,s,top); top = t; |
|
} |
|
*rp = top; |
|
} |
|
|
|
void uhensel_incremental(f,mfl,mod,start,bound,rp) |
|
P f; |
|
NODE mfl; |
|
int mod,start,bound; |
|
NODE *rp; |
|
{ |
|
ML blist,clist,rlist; |
|
LUM fl; |
|
LUM *lblist; |
|
int nf,i,j,k; |
|
int **p; |
|
P s; |
|
V v; |
|
NODE t,top; |
|
|
|
nf = length(mfl); |
|
blist = MLALLOC(nf); blist->n = nf; blist->mod = mod; |
|
lblist = (LUM *)MALLOC(nf*sizeof(LUM)); |
|
for ( i = 0, t = mfl; i < nf; i++, t = NEXT(t) ) { |
|
blist->c[i] = (pointer)UMALLOC(UDEG((P)BDY(t))); |
|
ptoum(mod,(P)BDY(t),blist->c[i]); |
|
W_LUMALLOC((int)UDEG((P)BDY(t)),bound,lblist[i]); |
|
ptolum(mod,start,(P)BDY(t),lblist[i]); |
|
p = lblist[i]->c; |
|
for ( j = DEG(lblist[i]); j >= 0; j-- ) |
|
for ( k = start; k < bound; k++ ) |
|
p[j][k] = 0; |
|
} |
|
gcdgen(f,blist,&clist); |
|
clist->bound = bound; |
|
W_LUMALLOC((int)UDEG(f),bound,fl); |
|
ptolum(mod,bound,f,fl); |
|
henmain_incremental(fl,lblist,clist,nf,mod,start,bound); |
|
v = VR(f); |
|
for ( i = nf-1, top = 0; i >= 0; i-- ) { |
|
lumtop_unsigned(v,mod,bound,lblist[i],&s); |
MKNODE(t,s,top); top = t; |
MKNODE(t,s,top); top = t; |
} |
} |
*rp = top; |
*rp = top; |