=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/engine/N.c,v retrieving revision 1.5 retrieving revision 1.7 diff -u -p -r1.5 -r1.7 --- OpenXM_contrib2/asir2000/engine/N.c 2001/10/09 01:36:10 1.5 +++ OpenXM_contrib2/asir2000/engine/N.c 2004/12/04 09:39:27 1.7 @@ -45,7 +45,7 @@ * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. * - * $OpenXM: OpenXM_contrib2/asir2000/engine/N.c,v 1.4 2000/12/21 02:51:45 murao Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/engine/N.c,v 1.6 2003/09/02 07:00:51 noro Exp $ */ #include "ca.h" #include "base.h" @@ -670,6 +670,15 @@ extern int igcd_algorithm; void gcdEuclidn(), gcdn_HMEXT(); +void lcmn(N n1,N n2,N *nr) +{ + N g,t; + + gcdn(n1,n2,&g); + divsn(n1,g,&t); + muln(t,n2,nr); +} + void gcdn(N n1,N n2,N *nr) { if ( !igcd_algorithm ) @@ -927,13 +936,17 @@ void freen(N n) free(n); } +/* accepts Z */ int n_bits(N n) { - unsigned int l,i,t; + unsigned int i,t; + int l; if ( !n ) return 0; - l = PL(n); t = BD(n)[l-1]; + l = PL(n); + if ( l < 0 ) l = -l; + t = BD(n)[l-1]; for ( i = 0; t; t>>=1, i++); return i + (l-1)*BSH; }