| version 1.2, 2000/08/21 08:31:24 |
version 1.5, 2002/03/15 02:52:10 |
|
|
| * shall be made on your publication or presentation in any form of the |
* shall be made on your publication or presentation in any form of the |
| * results obtained by use of the SOFTWARE. |
* results obtained by use of the SOFTWARE. |
| * (4) In the event that you modify the SOFTWARE, you shall notify FLL by |
* (4) In the event that you modify the SOFTWARE, you shall notify FLL by |
| * e-mail at risa-admin@flab.fujitsu.co.jp of the detailed specification |
* e-mail at risa-admin@sec.flab.fujitsu.co.jp of the detailed specification |
| * for such modification or the source code of the modified part of the |
* for such modification or the source code of the modified part of the |
| * SOFTWARE. |
* SOFTWARE. |
| * |
* |
|
|
| * 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/engine/D.c,v 1.1.1.1 1999/12/03 07:39:07 noro Exp $ |
* $OpenXM: OpenXM_contrib2/asir2000/engine/D.c,v 1.4 2001/06/07 04:54:39 noro Exp $ |
| */ |
*/ |
| #include "ca.h" |
#include "ca.h" |
| |
|
|
|
| for ( index = 0, num = number; ; index++ ) { |
for ( index = 0, num = number; ; index++ ) { |
| if ( n == 1 ) |
if ( n == 1 ) |
| goto TAIL; |
goto TAIL; |
| p = lprime[index]; |
p = get_lprime(index); |
| if ( !p ) |
|
| error("nthrootn : lprime[] exhausted."); |
|
| if ( !(num0 = rem(num,p)) ) |
if ( !(num0 = rem(num,p)) ) |
| continue; |
continue; |
| STON(n,n1); STON(p-1,n2); gcdn(n1,n2,&gcd); |
STON(n,n1); STON(p-1,n2); gcdn(n1,n2,&gcd); |
|
|
| for ( i = 0, ptr = BD(n); i < PL(n); i++ ) |
for ( i = 0, ptr = BD(n); i < PL(n); i++ ) |
| ptr[i] = c[i]; |
ptr[i] = c[i]; |
| bnton(mod,n,&tn); NTOQ(tn,sgn,*qp); |
bnton(mod,n,&tn); NTOQ(tn,sgn,*qp); |
| |
} |
| |
} |
| |
|
| |
void padictoq_unsigned(int,int,int *,Q *); |
| |
|
| |
void lumtop_unsigned(v,mod,bound,f,g) |
| |
V v; |
| |
int mod; |
| |
int bound; |
| |
LUM f; |
| |
P *g; |
| |
{ |
| |
DCP dc,dc0; |
| |
int **l; |
| |
int i; |
| |
Q q; |
| |
|
| |
for ( dc0 = NULL, i = DEG(f), l = COEF(f); i >= 0; i-- ) { |
| |
padictoq_unsigned(mod,bound,l[i],&q); |
| |
if ( q ) { |
| |
NEXTDC(dc0,dc); |
| |
if ( i ) |
| |
STOQ(i,DEG(dc)); |
| |
else |
| |
DEG(dc) = 0; |
| |
COEF(dc) = (P)q; |
| |
} |
| |
} |
| |
if ( !dc0 ) |
| |
*g = 0; |
| |
else { |
| |
NEXT(dc) = 0; MKP(v,dc0,*g); |
| |
} |
| |
} |
| |
|
| |
void padictoq_unsigned(mod,bound,p,qp) |
| |
int mod,bound,*p; |
| |
Q *qp; |
| |
{ |
| |
register int h,i,t; |
| |
int br,sgn; |
| |
unsigned int *ptr; |
| |
N n,tn; |
| |
int *c; |
| |
|
| |
c = W_ALLOC(bound); |
| |
for ( i = 0; i < bound; i++ ) |
| |
c[i] = p[i]; |
| |
for ( i = bound - 1; ( i >= 0 ) && ( c[i] == 0 ); i--); |
| |
if ( i == -1 ) |
| |
*qp = 0; |
| |
else { |
| |
n = NALLOC(i+1); PL(n) = i+1; |
| |
for ( i = 0, ptr = BD(n); i < PL(n); i++ ) |
| |
ptr[i] = c[i]; |
| |
bnton(mod,n,&tn); NTOQ(tn,1,*qp); |
| } |
} |
| } |
} |
| |
|