File: [local] / OpenXM_contrib2 / asir2018 / engine / N.c (download)
Revision 1.2, Fri Sep 21 07:06:51 2018 UTC (5 years, 8 months ago) by noro
Branch: MAIN
Changes since 1.1: +50 -0
lines
Fixed several bugs.
configure.in -> configure.ac.
|
#include "gmp.h"
unsigned long mul64(unsigned long a,unsigned long b,unsigned long *c)
{
unsigned long u;
u = (unsigned long)mpn_mul_1((mp_limb_t *)c,(mp_limb_t *)&a,1,(mp_limb_t)b);
c[1] = u;
return u;
}
unsigned long mod64(unsigned long u,unsigned long l,unsigned long b)
{
unsigned long q[2],d[2];
unsigned long r;
d[0] = l; d[1] = u;
r = (unsigned long)mpn_divmod_1((mp_limb_t *)q,(mp_limb_t *)d,2,(mp_limb_t)b);
return r;
}
unsigned long mulmod64(unsigned long a,unsigned long b,unsigned long m)
{
unsigned long d[2],q[2];
unsigned long r;
d[1] = (unsigned long)mpn_mul_1(d,(mp_limb_t *)&a,1,(mp_limb_t)b);
r = (unsigned long)mpn_divmod_1((mp_limb_t *)q,(mp_limb_t *)d,2,(mp_limb_t)m);
return r;
}
unsigned long muladdmod64(unsigned long a,unsigned long b,unsigned long c,unsigned long m)
{
unsigned long d[2],q[2];
unsigned long r;
d[0] = c;
d[1] = (unsigned long)mpn_addmul_1(d,(mp_limb_t *)&a,1,(mp_limb_t)b);
r = (unsigned long)mpn_divmod_1((mp_limb_t *)q,(mp_limb_t *)d,2,(mp_limb_t)m);
return r;
}
unsigned long invmod64(unsigned long a,unsigned long m)
{
mpz_t x,y,z;
mpz_init_set_ui(x,a);
mpz_init_set_ui(y,m);
mpz_invert(z,x,y);
return mpz_get_ui(z);
}