version 1.3, 2000/08/22 05:04:04 |
version 1.4, 2000/12/21 02:51:45 |
|
|
* 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/N.c,v 1.2 2000/08/21 08:31:25 noro Exp $ |
* $OpenXM: OpenXM_contrib2/asir2000/engine/N.c,v 1.3 2000/08/22 05:04:04 noro Exp $ |
*/ |
*/ |
#include "ca.h" |
#include "ca.h" |
#include "base.h" |
#include "base.h" |
|
|
FREEN(nw); |
FREEN(nw); |
} |
} |
|
|
|
|
|
|
extern int igcd_algorithm; |
extern int igcd_algorithm; |
|
|
void gcdEuclidn(); |
void gcdEuclidn(), gcdn_HMEXT(); |
|
|
void gcdn(n1,n2,nr) |
void gcdn(n1,n2,nr) |
N n1,n2,*nr; |
N n1,n2,*nr; |
|
|
if ( !igcd_algorithm ) |
if ( !igcd_algorithm ) |
gcdEuclidn(n1,n2,nr); |
gcdEuclidn(n1,n2,nr); |
else { |
else { |
if ( !n1 ) |
gcdn_HMEXT(n1,n2,nr); |
*nr = n2; |
|
else if ( !n2 ) |
|
*nr = n1; |
|
else { |
|
n32ton27(n1,&m1); |
|
n32ton27(n2,&m2); |
|
gcdBinary_27n(m1,m2,&g); |
|
n27ton32(g,nr); |
|
} |
|
} |
} |
} |
} |
|
|
|
#include "Ngcd.c" |
|
|
void gcdEuclidn(n1,n2,nr) |
void gcdEuclidn(n1,n2,nr) |
N n1,n2,*nr; |
N n1,n2,*nr; |
{ |
{ |
|
|
m1 = m2; m2 = r; |
m1 = m2; m2 = r; |
} |
} |
} |
} |
for ( i1 = BD(m1)[0], i2 = BD(m2)[0]; ir = i1 % i2; i1 = i2, i2 = ir ); |
for ( i1 = BD(m1)[0], i2 = BD(m2)[0]; ir = i1 % i2; i2 = ir ) |
|
i1 = i2; |
if ( i2 == 1 ) |
if ( i2 == 1 ) |
COPY(ONEN,*nr); |
COPY(ONEN,*nr); |
else { |
else { |