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); |
} |
} |
} |
} |
|
|