11 #include <factory/factory.h> 53 #pragma GCC diagnostic ignored "-Wlong-long" 59 #define ULONG64 (unsigned long long)(unsigned long) 61 #define ULONG64 (unsigned long) 76 int h = (int)((
long)
k);
77 return ((
int)h !=0) && (h <= (r->ch>>1));
93 if (((
long)a == 0) || ((
long)b == 0))
105 long ii=i % (long)r->ch;
106 if (ii < 0L) ii += (long)r->ch;
108 number c = (number)ii;
121 if ((
long)n > (((
long)r->ch) >>1))
return ((
long)n -((
long)r->ch));
122 else return ((
long)n);
130 number c =
npAddM(a,b, r);
167 return ((r->npPminus1M == (
long)a) &&(1L!=(
long)a));
188 XGCD(d, s, t,
a, R->ch);
191 long u,
v, u0, v0, u1, v1, u2, v2, q,
r;
222 number d = (number)(
long)r->npExpTable[r->npPminus1M - r->npLogTable[(long)c]];
224 long inv=(long)r->npInvTable[(
long)c];
228 r->npInvTable[(long)c]=inv;
230 number d = (number)inv;
257 int s = r->npLogTable[(long)a] - r->npLogTable[(
long)
b];
260 d = (number)(
long)r->npExpTable[
s];
289 if ((
long)c==0L)
return c;
308 return ((
long)a) > ((long)b);
325 if ((
long)a>(((
long)r->ch) >>1))
StringAppend(
"-%d",(
int)(((
long)r->ch)-((
long)a)));
353 if (((*s) >=
'0') && ((*s) <=
'9'))
362 while (((*s) >=
'0') && ((*s) <=
'9'));
363 if (ii >= (
unsigned long)r->ch) ii = ii % r->ch;
382 *a = (number)(
long)z;
390 *a =
nvDiv((number)(
long)z,(number)(
long)n,r);
393 *a =
npDiv((number)(
long)z,(number)(
long)n,r);
407 if (r->npInvTable!=
NULL)
408 omFreeSize( (
void *)r->npInvTable, r->ch*
sizeof(
unsigned short) );
411 if (r->npExpTable!=
NULL)
413 omFreeSize( (
void *)r->npExpTable, r->ch*
sizeof(
unsigned short) );
414 omFreeSize( (
void *)r->npLogTable, r->ch*
sizeof(
unsigned short) );
415 r->npExpTable=
NULL; r->npLogTable=
NULL;
423 return (n==
n_Zp) && (r->ch==(int)(
long)parameter);
447 static char npCoeffName_buf[15];
448 snprintf(npCoeffName_buf,14,
"ZZ/%d",cf->ch);
449 return npCoeffName_buf;
459 fprintf(f,
"%d ",(
int)(
long)n);
467 return (number)(long)dd;
478 const int c = (int) (
long)
p;
489 r->npPminus1M = c - 1;
540 r->cfExactDiv=
nvDiv;
560 r->nNULL = (number)0;
562 r->has_simple_Alloc=
TRUE;
563 r->has_simple_Inverse=
TRUE;
570 #if !defined(HAVE_DIV_MOD) || !defined(HAVE_MULT_MOD) 571 r->npExpTable=(
unsigned short *)
omAlloc( r->ch*
sizeof(
unsigned short) );
572 r->npLogTable=(
unsigned short *)
omAlloc( r->ch*
sizeof(
unsigned short) );
573 r->npExpTable[0] = 1;
574 r->npLogTable[0] = 0;
580 r->npLogTable[1] = 0;
586 r->npExpTable[
i] =(int)(((
long)w * (long)r->npExpTable[i-1]) % r->ch);
587 r->npLogTable[r->npExpTable[
i]] =
i;
588 if ( r->npExpTable[
i] == 1 )
597 r->npExpTable[1] = 1;
598 r->npLogTable[1] = 0;
602 r->npInvTable=(
unsigned short*)
omAlloc0( r->ch*
sizeof(
unsigned short) );
611 if (((
long)a<0L) || ((
long)a>(
long)r->ch))
613 Print(
"wrong mod p number %ld at %s,%d\n",(
long)a,f,l);
626 while (i < 0) i+=dst_r->ch;
643 size = (*f)[0]._mp_size;
657 e=(*f)[0]._mp_exp-
size;
669 al = dest->_mp_size =
size;
671 dd = (mp_ptr)
omAlloc(
sizeof(mp_limb_t)*al);
672 for (i=0;i<
size;i++) dd[i] = qp[i];
674 nn = (mp_ptr)
omAlloc(
sizeof(mp_limb_t)*bl);
676 for (i=bl-2;i>=0;i--) nn[i] = 0;
679 ndest->_mp_alloc = ndest->_mp_size = bl;
681 in=mpz_fdiv_ui(ndest,dst_r->ch);
686 al = dest->_mp_size = size+e;
688 dd = (mp_ptr)
omAlloc(
sizeof(mp_limb_t)*al);
689 for (i=0;i<
size;i++) dd[i+e] = qp[i];
690 for (i=0;i<e;i++) dd[i] = 0;
695 dest->_mp_alloc = al;
696 iz=mpz_fdiv_ui(dest,dst_r->ch);
699 iz=(long)
npDiv((number)iz,(number)in,dst_r);
710 mpz_ptr erg = (mpz_ptr)
omAlloc(
sizeof(mpz_t));
713 mpz_mod_ui(erg, (mpz_ptr) from, dst->ch);
714 number r = (number) mpz_get_si(erg);
736 long i = (long) (((
unsigned long) from) % dst->ch);
745 return (number) (f.
intval());
819 long u, u0, u1, u2, q,
r;
860 else if ((
long)b==0L)
903 Print(
"ZZ/%d",r->ch);
const CanonicalForm int s
static number npMapMachineInt(number from, const coeffs, const coeffs dst)
static FORCE_INLINE BOOLEAN nCoeff_is_Zp(const coeffs r)
static number npMultM(number a, number b, const coeffs r)
number npInit(long i, const coeffs r)
long npInt(number &n, const coeffs r)
number nlModP(number q, const coeffs, const coeffs Zp)
number nvInvers(number c, const coeffs r)
static void npWriteFd(number n, FILE *f, const coeffs)
number ndCopyMap(number a, const coeffs aRing, const coeffs r)
static unsigned long InvMod(unsigned long a, const coeffs r)
static FORCE_INLINE BOOLEAN nCoeff_is_long_R(const coeffs r)
void npPower(number a, int i, number *result, const coeffs r)
number npInvers(number c, const coeffs r)
#define npEqualM(A, B, r)
static number npMapP(number from, const coeffs src, const coeffs dst_r)
static char * npCoeffName(const coeffs cf)
number nvMult(number a, number b, const coeffs r)
long nvInvMod(long a, const coeffs R)
#define omFreeSize(addr, size)
static FORCE_INLINE BOOLEAN nCoeff_is_Ring_2toM(const coeffs r)
(), see rinteger.h, new impl.
number npAdd(number a, number b, const coeffs r)
void nvInpMult(number &a, number b, const coeffs r)
void npWrite(number a, const coeffs r)
static FORCE_INLINE int n_GetChar(const coeffs r)
Return the characteristic of the coeff. domain.
number npDiv(number a, number b, const coeffs r)
void WerrorS(const char *s)
BOOLEAN npEqual(number a, number b, const coeffs r)
BOOLEAN npInitChar(coeffs r, void *p)
BOOLEAN npDBTest(number a, const char *f, const int l, const coeffs r)
virtual class for internal CanonicalForm's
static number npNegM(number a, const coeffs r)
number npInversM(number c, const coeffs r)
static number npSubM(number a, number b, const coeffs r)
static number npRandom(siRandProc p, number, number, const coeffs cf)
BOOLEAN npGreater(number a, number b, const coeffs r)
number nvDiv(number a, number b, const coeffs r)
BOOLEAN npIsMOne(number a, const coeffs r)
Coefficient rings, fields and other domains suitable for Singular polynomials.
void npCoeffWrite(const coeffs r, BOOLEAN details)
static FORCE_INLINE BOOLEAN nCoeff_is_CF(const coeffs r)
The main handler for Singular numbers which are suitable for Singular polynomials.
number(* nMapFunc)(number a, const coeffs src, const coeffs dst)
maps "a", which lives in src, into dst
BOOLEAN npGreaterZero(number k, const coeffs r)
static const char * npEati(const char *s, int *i, const coeffs r)
#define n_Test(a, r)
BOOLEAN n_Test(number a, const coeffs r)
static number npAddM(number a, number b, const coeffs r)
const char *const nDivBy0
nMapFunc npSetMap(const coeffs src, const coeffs dst)
(mpz_ptr), see rmodulon,h
static number npMapLongR(number from, const coeffs, const coeffs dst_r)
static FORCE_INLINE n_coeffType getCoeffType(const coeffs r)
Returns the type of coeffs domain.
number npSub(number a, number b, const coeffs r)
number npConvFactoryNSingN(const CanonicalForm n, const coeffs r)
const Variable & v
< [in] a sqrfree bivariate poly
static char * npCoeffString(const coeffs cf)
number npNeg(number c, const coeffs r)
static number npMapCanonicalForm(number a, const coeffs, const coeffs dst)
static number npMapZ(number from, const coeffs src, const coeffs dst)
number npMult(number a, number b, const coeffs r)
CanonicalForm npConvSingNFactoryN(number n, BOOLEAN setChar, const coeffs r)
static number npMapGMP(number from, const coeffs, const coeffs dst)
static number npReadFd(s_buff f, const coeffs)
static BOOLEAN npCoeffsEqual(const coeffs r, n_coeffType n, void *parameter)
number nvInversM(number c, const coeffs r)
void npKillChar(coeffs r)
const char * npRead(const char *s, number *a, const coeffs r)
BOOLEAN npIsOne(number a, const coeffs r)
BOOLEAN npIsZero(number a, const coeffs r)
static number nvMultM(number a, number b, const coeffs r)