version 1.1, 2018/09/19 05:45:07 |
version 1.2, 2018/09/28 08:20:28 |
|
|
* 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.1 2018/09/19 05:45:07 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 { |
Line 494 void chnrem(int mod,V v,P c,Z q,UM t,P *cr,Z *qr) |
|
Line 494 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 502 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 650 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); |