version 1.1, 2018/09/19 05:45:06 |
version 1.3, 2020/10/06 06:31:19 |
|
|
* 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: OpenXM_contrib2/asir2018/builtin/gf.c,v 1.2 2018/09/28 08:20:27 noro Exp $ |
*/ |
*/ |
#include "ca.h" |
#include "ca.h" |
#include "parse.h" |
#include "parse.h" |
Line 142 void Puhensel(NODE arg,LIST *rp) |
|
Line 142 void Puhensel(NODE arg,LIST *rp) |
|
|
|
f = (P)ARG0(arg); |
f = (P)ARG0(arg); |
mfl = BDY((LIST)ARG1(arg)); |
mfl = BDY((LIST)ARG1(arg)); |
mod = QTOS((Q)ARG2(arg)); |
mod = ZTOS((Q)ARG2(arg)); |
bound = QTOS((Q)ARG3(arg)); |
bound = ZTOS((Q)ARG3(arg)); |
uhensel(f,mfl,mod,bound,&r); |
uhensel(f,mfl,mod,bound,&r); |
MKLIST(*rp,r); |
MKLIST(*rp,r); |
} |
} |
Line 156 void Puhensel_incremental(NODE arg,LIST *rp) |
|
Line 156 void Puhensel_incremental(NODE arg,LIST *rp) |
|
|
|
f = (P)ARG0(arg); |
f = (P)ARG0(arg); |
mfl = BDY((LIST)ARG1(arg)); |
mfl = BDY((LIST)ARG1(arg)); |
mod = QTOS((Q)ARG2(arg)); |
mod = ZTOS((Q)ARG2(arg)); |
start = QTOS((Q)ARG3(arg)); |
start = ZTOS((Q)ARG3(arg)); |
bound = QTOS((Q)ARG4(arg)); |
bound = ZTOS((Q)ARG4(arg)); |
uhensel_incremental(f,mfl,mod,start,bound,&r); |
uhensel_incremental(f,mfl,mod,start,bound,&r); |
MKLIST(*rp,r); |
MKLIST(*rp,r); |
} |
} |
Line 238 void Psfuhensel(NODE arg,LIST *rp) |
|
Line 238 void Psfuhensel(NODE arg,LIST *rp) |
|
f = (P)ARG0(arg); |
f = (P)ARG0(arg); |
mfl = BDY((LIST)ARG1(arg)); |
mfl = BDY((LIST)ARG1(arg)); |
ev = (GFS)ARG2(arg); |
ev = (GFS)ARG2(arg); |
bound = QTOS((Q)ARG3(arg)); |
bound = ZTOS((Q)ARG3(arg)); |
sfuhensel(f,mfl,ev,bound,&r); |
sfuhensel(f,mfl,ev,bound,&r); |
MKLIST(*rp,r); |
MKLIST(*rp,r); |
} |
} |
Line 327 void Presfmain(NODE arg,LIST *rp) |
|
Line 327 void Presfmain(NODE arg,LIST *rp) |
|
int sflag; |
int sflag; |
|
|
f = (P)ARG0(arg); |
f = (P)ARG0(arg); |
mod = QTOS((Q)ARG1(arg)); |
mod = ZTOS((Q)ARG1(arg)); |
mfl = BDY((LIST)ARG2(arg)); |
mfl = BDY((LIST)ARG2(arg)); |
mdl = BDY((LIST)ARG3(arg)); |
mdl = BDY((LIST)ARG3(arg)); |
for ( n = nb = 0, t = mfl; t; nb++, t = NEXT(t) ) |
for ( n = nb = 0, t = mfl; t; nb++, t = NEXT(t) ) |
Line 344 void Presfmain(NODE arg,LIST *rp) |
|
Line 344 void Presfmain(NODE arg,LIST *rp) |
|
sflag = 0; |
sflag = 0; |
for ( j = 0, s = BDY((LIST)BDY(t)); s; j++, s = NEXT(s) ) |
for ( j = 0, s = BDY((LIST)BDY(t)); s; j++, s = NEXT(s) ) |
mf[k++] = (P)BDY(s); |
mf[k++] = (P)BDY(s); |
nf[i] = j; md[i] = QTOS((Q)BDY(u)); |
nf[i] = j; md[i] = ZTOS((Q)BDY(u)); |
} |
} |
resf_hensel(mod,f,n,mf,&list); |
resf_hensel(mod,f,n,mf,&list); |
if ( sflag ) |
if ( sflag ) |
Line 458 void resf_dtest(P f,ML list,int nb,int *nfl,int *mdl,D |
|
Line 458 void resf_dtest(P f,ML list,int nb,int *nfl,int *mdl,D |
|
} |
} |
if ( ( np -= k ) < k ) |
if ( ( np -= k ) < k ) |
break; |
break; |
if ( np - win[0] + 1 < k ) |
if ( np - win[0] + 1 < k ) { |
if ( ++k > np ) |
if ( ++k > np ) |
break; |
break; |
else |
else |
for ( i = 0; i < k; i++ ) |
for ( i = 0; i < k; i++ ) |
win[i] = i + 1; |
win[i] = i + 1; |
else |
} else |
for ( i = 1; i < k; i++ ) |
for ( i = 1; i < k; i++ ) |
win[i] = win[0] + i; |
win[i] = win[0] + i; |
} else if ( !ncombi(1,np,k,win) ) |
} else if ( !ncombi(1,np,k,win) ) { |
if ( k == np ) |
if ( k == np ) |
break; |
break; |
else |
else |
for ( i = 0, ++k; i < k; i++ ) |
for ( i = 0, ++k; i < k; i++ ) |
win[i] = i + 1; |
win[i] = i + 1; |
|
} |
} |
} |
NEXTDC(dcf0,dcf); COEF(dcf) = g; |
NEXTDC(dcf0,dcf); COEF(dcf) = g; |
DEG(dcf) = ONE; NEXT(dcf) = 0;*dcp = dcf0; |
DEG(dcf) = ONE; NEXT(dcf) = 0;*dcp = dcf0; |
Line 819 void Pnullspace(NODE arg,LIST *rp) |
|
Line 820 void Pnullspace(NODE arg,LIST *rp) |
|
mat = (MAT)ARG0(arg); |
mat = (MAT)ARG0(arg); |
p = (P)ARG1(arg); |
p = (P)ARG1(arg); |
v = VR(p); |
v = VR(p); |
mod = QTOS((Q)ARG2(arg)); |
mod = ZTOS((Q)ARG2(arg)); |
n = mat->row; |
n = mat->row; |
w = (UM **)almat_pointer(n,n); |
w = (UM **)almat_pointer(n,n); |
for ( i = 0; i < n; i++ ) |
for ( i = 0; i < n; i++ ) |
Line 837 void Pnullspace(NODE arg,LIST *rp) |
|
Line 838 void Pnullspace(NODE arg,LIST *rp) |
|
umtop(v,s[j],&t[j]); |
umtop(v,s[j],&t[j]); |
MKVECT(u,n); |
MKVECT(u,n); |
for ( i = 0; i < n; i++ ) { |
for ( i = 0; i < n; i++ ) { |
STOQ(ind[i],q); u->body[i] = (pointer)q; |
STOZ(ind[i],q); u->body[i] = (pointer)q; |
} |
} |
MKNODE(n1,u,0); MKNODE(n0,r,n1); MKLIST(*rp,n0); |
MKNODE(n1,u,0); MKNODE(n0,r,n1); MKLIST(*rp,n0); |
} |
} |
Line 921 void Pnullspace_ff(NODE arg,LIST *rp) |
|
Line 922 void Pnullspace_ff(NODE arg,LIST *rp) |
|
t[j] = s[j]; |
t[j] = s[j]; |
MKVECT(u,n); |
MKVECT(u,n); |
for ( i = 0; i < n; i++ ) { |
for ( i = 0; i < n; i++ ) { |
STOQ(ind[i],q); u->body[i] = (pointer)q; |
STOZ(ind[i],q); u->body[i] = (pointer)q; |
} |
} |
MKNODE(n1,u,0); MKNODE(n0,r,n1); MKLIST(*rp,n0); |
MKNODE(n1,u,0); MKNODE(n0,r,n1); MKLIST(*rp,n0); |
} |
} |
Line 1284 void showgfmat(UM **mat,int n) |
|
Line 1285 void showgfmat(UM **mat,int n) |
|
if ( k > 1 ) |
if ( k > 1 ) |
fprintf(asir_out,"a^%d",k); |
fprintf(asir_out,"a^%d",k); |
else if ( k == 1 ) |
else if ( k == 1 ) |
fprintf(asir_out,"a",k); |
fprintf(asir_out,"a"); |
} |
} |
fprintf(asir_out," "); |
fprintf(asir_out," "); |
} |
} |
|
|
p2 = (P)ARG1(arg); |
p2 = (P)ARG1(arg); |
v = VR((P)ARG2(arg)); |
v = VR((P)ARG2(arg)); |
d = (P)ARG3(arg); |
d = (P)ARG3(arg); |
m = QTOS((Q)ARG4(arg)); |
m = ZTOS((Q)ARG4(arg)); |
reordvar(CO,v,&vl); |
reordvar(CO,v,&vl); |
reorderp(vl,CO,p1,&t); ptomp(m,t,&m1); |
reorderp(vl,CO,p1,&t); ptomp(m,t,&m1); |
reorderp(vl,CO,p2,&t); ptomp(m,t,&m2); |
reorderp(vl,CO,p2,&t); ptomp(m,t,&m2); |
|
|
while ( 1 ) { |
while ( 1 ) { |
inva_mod(COEF(DC(m2)),d,m,&inv); |
inva_mod(COEF(DC(m2)),d,m,&inv); |
NEWDC(dc); NEXT(dc) = 0; MKP(v,dc,h); |
NEWDC(dc); NEXT(dc) = 0; MKP(v,dc,h); |
d0 = deg(v,m1)-deg(v,m2); STOQ(d0,DEG(dc)); |
d0 = deg(v,m1)-deg(v,m2); STOZ(d0,DEG(dc)); |
mulgq(m,d,inv,COEF(DC(m1)),&COEF(dc)); |
mulgq(m,d,inv,COEF(DC(m1)),&COEF(dc)); |
mulgp(vl,m,d,m2,h,&t); subgp(vl,m,d,m1,t,&s); |
mulgp(vl,m,d,m2,h,&t); subgp(vl,m,d,m1,t,&s); |
} |
} |
Line 1327 void Ppwr_mod(NODE arg,P *rp) |
|
Line 1328 void Ppwr_mod(NODE arg,P *rp) |
|
int m; |
int m; |
Z n; |
Z n; |
|
|
m = QTOS((Q)ARG4(arg)); n = (Z)ARG5(arg); |
m = ZTOS((Q)ARG4(arg)); n = (Z)ARG5(arg); |
ptomp(m,(P)ARG0(arg),&p); ptomp(m,(P)ARG1(arg),&a); |
ptomp(m,(P)ARG0(arg),&p); ptomp(m,(P)ARG1(arg),&a); |
ptomp(m,(P)ARG3(arg),&d); |
ptomp(m,(P)ARG3(arg),&d); |
pwr_mod(p,a,VR((P)ARG2(arg)),d,m,n,&r); |
pwr_mod(p,a,VR((P)ARG2(arg)),d,m,n,&r); |
Line 1344 void pwr_mod(P p,P a,V v,P d,int m,Z n,P *rp) |
|
Line 1345 void pwr_mod(P p,P a,V v,P d,int m,Z n,P *rp) |
|
else if ( UNIZ(n) ) |
else if ( UNIZ(n) ) |
*rp = p; |
*rp = p; |
else { |
else { |
STOQ(2,two); |
STOZ(2,two); |
divqrz(n,two,&n1,&b); |
divqrz(n,two,&n1,&b); |
pwr_mod(p,a,v,d,m,n1,&t); |
pwr_mod(p,a,v,d,m,n1,&t); |
mulmp(CO,m,t,t,&s); rem_mod(s,a,v,d,m,&r); |
mulmp(CO,m,t,t,&s); rem_mod(s,a,v,d,m,&r); |