version 1.1, 2018/09/19 05:45:07 |
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/engine/PUM.c,v 1.2 2018/09/28 08:20:28 noro Exp $ |
*/ |
*/ |
#include "ca.h" |
#include "ca.h" |
|
|
Line 105 void resultmp(VL vl,int mod,V v,P p1,P p2,P *pr) |
|
Line 105 void resultmp(VL vl,int mod,V v,P p1,P p2,P *pr) |
|
*pr = 0; |
*pr = 0; |
return; |
return; |
} else { |
} else { |
d = deg(v,q2); STOQ(d,dq); |
d = deg(v,q2); STOZ(d,dq); |
pwrmp(vl,mod,q1,dq,pr); |
pwrmp(vl,mod,q1,dq,pr); |
return; |
return; |
} |
} |
else if ( VR(q2) != v ) { |
else if ( VR(q2) != v ) { |
d = deg(v,q1); STOQ(d,dq); |
d = deg(v,q1); STOZ(d,dq); |
pwrmp(vl,mod,q2,dq,pr); |
pwrmp(vl,mod,q2,dq,pr); |
return; |
return; |
} |
} |
Line 131 void resultmp(VL vl,int mod,V v,P p1,P p2,P *pr) |
|
Line 131 void resultmp(VL vl,int mod,V v,P p1,P p2,P *pr) |
|
adj = (P)ONEM; |
adj = (P)ONEM; |
} else { |
} else { |
premmp(nvl,mod,q1,q2,&t); |
premmp(nvl,mod,q1,q2,&t); |
d = deg(v,t); STOQ(d,dq); pwrmp(nvl,mod,LC(q2),dq,&adj); |
d = deg(v,t); STOZ(d,dq); pwrmp(nvl,mod,LC(q2),dq,&adj); |
g1 = q2; g2 = t; |
g1 = q2; g2 = t; |
if ( d1 % 2 ) { |
if ( d1 % 2 ) { |
chsgnmp(mod,adj,&t); adj = t; |
chsgnmp(mod,adj,&t); adj = t; |
Line 157 void resultmp(VL vl,int mod,V v,P p1,P p2,P *pr) |
|
Line 157 void resultmp(VL vl,int mod,V v,P p1,P p2,P *pr) |
|
j = k - 1; |
j = k - 1; |
} |
} |
else { |
else { |
d = j - k; STOQ(d,dq); |
d = j - k; STOZ(d,dq); |
pwrmp(nvl,mod,(VR(g2)==v?LC(g2):g2),dq,&m); |
pwrmp(nvl,mod,(VR(g2)==v?LC(g2):g2),dq,&m); |
mulmp(nvl,mod,g2,m,&m1); |
mulmp(nvl,mod,g2,m,&m1); |
pwrmp(nvl,mod,lc,dq,&m); divsmp(nvl,mod,m1,m,&t); |
pwrmp(nvl,mod,lc,dq,&m); divsmp(nvl,mod,m1,m,&t); |
Line 201 void premmp(VL vl,int mod,P p1,P p2,P *pr) |
|
Line 201 void premmp(VL vl,int mod,P p1,P p2,P *pr) |
|
bzero((char *)pw,(int)((n1+1)*sizeof(P))); |
bzero((char *)pw,(int)((n1+1)*sizeof(P))); |
|
|
for ( dc = DC(p1); dc; dc = NEXT(dc) ) |
for ( dc = DC(p1); dc; dc = NEXT(dc) ) |
pw[QTOS(DEG(dc))] = COEF(dc); |
pw[ZTOS(DEG(dc))] = COEF(dc); |
|
|
for ( i = n1; i >= n2; i-- ) { |
for ( i = n1; i >= n2; i-- ) { |
if ( pw[i] ) { |
if ( pw[i] ) { |
Line 212 void premmp(VL vl,int mod,P p1,P p2,P *pr) |
|
Line 212 void premmp(VL vl,int mod,P p1,P p2,P *pr) |
|
|
|
for ( dc = DC(p2), d = i - n2; dc; dc = NEXT(dc) ) { |
for ( dc = DC(p2), d = i - n2; dc; dc = NEXT(dc) ) { |
mulmp(vl,mod,COEF(dc),m,&m1); |
mulmp(vl,mod,COEF(dc),m,&m1); |
addmp(vl,mod,pw[QTOS(DEG(dc))+d],m1,&m2); |
addmp(vl,mod,pw[ZTOS(DEG(dc))+d],m1,&m2); |
pw[QTOS(DEG(dc))+d] = m2; |
pw[ZTOS(DEG(dc))+d] = m2; |
} |
} |
} else |
} else |
for ( j = i; j >= 0; j-- ) |
for ( j = i; j >= 0; j-- ) |
Line 252 void srchmp(VL vl,int mod,V v,P p1,P p2,P *pr) |
|
Line 252 void srchmp(VL vl,int mod,V v,P p1,P p2,P *pr) |
|
if ( VR(q2) != v ) |
if ( VR(q2) != v ) |
*pr = 0; |
*pr = 0; |
else { |
else { |
m = getdeg(v,q2); STOQ(m,dq); pwrmp(vl,mod,q1,dq,pr); |
m = getdeg(v,q2); STOZ(m,dq); pwrmp(vl,mod,q1,dq,pr); |
} |
} |
else if ( VR(q2) != v ) { |
else if ( VR(q2) != v ) { |
m = getdeg(v,q1); STOQ(m,dq); pwrmp(vl,mod,q2,dq,pr); |
m = getdeg(v,q1); STOZ(m,dq); pwrmp(vl,mod,q2,dq,pr); |
} else if ( !NEXT(nvl) ) |
} else if ( !NEXT(nvl) ) |
srchump(mod,p1,p2,pr); |
srchump(mod,p1,p2,pr); |
else { |
else { |
|
|
void srchump(int mod,P p1,P p2,P *pr) |
void srchump(int mod,P p1,P p2,P *pr) |
{ |
{ |
UM m,m1,q,r,t,g1,g2; |
UM m,m1,q,r,t,g1,g2; |
int lc,d,d1,d2,i,j,k,l,l1,l2,tmp,adj; |
int lc,d,d1,d2,i,j,k,l,l1,l2,adj; |
|
unsigned int tmp; |
V v; |
V v; |
|
|
v = VR(p1); d = MAX(UDEG(p1),UDEG(p2)); |
v = VR(p1); d = MAX(UDEG(p1),UDEG(p2)); |
Line 478 void chnremp(VL vl,int mod,P p,Z q,P c,P *r) |
|
Line 479 void chnremp(VL vl,int mod,P p,Z q,P c,P *r) |
|
|
|
void chnrem(int mod,V v,P c,Z q,UM t,P *cr,Z *qr) |
void chnrem(int mod,V v,P c,Z q,UM t,P *cr,Z *qr) |
{ |
{ |
int n,m,i,d,a,sd,tmp; |
int n,m,i,d,a,sd; |
|
unsigned int tmp; |
Z b,s,z; |
Z b,s,z; |
Z *pc,*pcr; |
Z *pc,*pcr; |
DCP dc; |
DCP dc; |
Line 494 void chnrem(int mod,V v,P c,Z q,UM t,P *cr,Z *qr) |
|
Line 496 void chnrem(int mod,V v,P c,Z q,UM t,P *cr,Z *qr) |
|
pc[0] = (Z)c; |
pc[0] = (Z)c; |
else |
else |
for ( dc = DC(c); dc; dc = NEXT(dc) ) |
for ( dc = DC(c); dc; dc = NEXT(dc) ) |
pc[QTOS(DEG(dc))] = (Z)COEF(dc); |
pc[ZTOS(DEG(dc))] = (Z)COEF(dc); |
for ( i = 0; i <= d; i++ ) { |
for ( i = 0; i <= d; i++ ) { |
b = (i>n?0:pc[i]); a = (i>m?0:COEF(t)[i]); |
b = (i>n?0:pc[i]); a = (i>m?0:COEF(t)[i]); |
if ( b ) |
if ( b ) |
Line 502 void chnrem(int mod,V v,P c,Z q,UM t,P *cr,Z *qr) |
|
Line 504 void chnrem(int mod,V v,P c,Z q,UM t,P *cr,Z *qr) |
|
sd = dmb(mod,(a>=0?a:a+mod),invm(remqi((Q)q,mod),mod),&tmp); |
sd = dmb(mod,(a>=0?a:a+mod),invm(remqi((Q)q,mod),mod),&tmp); |
if ( ( 2 * sd ) > mod ) |
if ( ( 2 * sd ) > mod ) |
sd -= mod; |
sd -= mod; |
STOQ(sd,z); mulz(z,q,&s); addz(s,b,&pcr[i]); |
STOZ(sd,z); mulz(z,q,&s); addz(s,b,&pcr[i]); |
} |
} |
STOQ(mod,z); mulz(q,z,qr); plisttop((P *)pcr,v,d,cr); |
STOZ(mod,z); mulz(q,z,qr); plisttop((P *)pcr,v,d,cr); |
} |
} |
|
|
void normalizemp(int mod,P g) |
void normalizemp(int mod,P g) |
Line 650 void sprsm(VL vl,int mod,V v,P p1,P p2,P *pr) |
|
Line 652 void sprsm(VL vl,int mod,V v,P p1,P p2,P *pr) |
|
if ( !r ) |
if ( !r ) |
break; |
break; |
|
|
d = deg(v,g1) - deg(v,g2); STOQ(d,dq); |
d = deg(v,g1) - deg(v,g2); STOZ(d,dq); |
pwrmp(nvl,mod,h,dq,&m); mulmp(nvl,mod,m,x,&m1); g1 = g2; |
pwrmp(nvl,mod,h,dq,&m); mulmp(nvl,mod,m,x,&m1); g1 = g2; |
divsmp(nvl,mod,r,m1,&g2); x = LC(g1); /* g1 is not const w.r.t v */ |
divsmp(nvl,mod,r,m1,&g2); x = LC(g1); /* g1 is not const w.r.t v */ |
pwrmp(nvl,mod,x,dq,&m1); mulmp(nvl,mod,m1,h,&m2); |
pwrmp(nvl,mod,x,dq,&m1); mulmp(nvl,mod,m1,h,&m2); |