32 4, 8, 16, 32, 64, 128, 256, 512,1024,2048,4096,8192,16384, 32768,
34 9, 27, 81,243,729,2187, 6561,19683,59049,
36 25,125,625,3125,15625,
114 if (((
long)a<0L) || ((
long)a>(
long)r->m_nfCharQ))
116 Print(
"wrong %d in %s:%d\n",(
int)((
long)a),f,l);
122 if (r->m_nfPlus1Table[i]>r->m_nfCharQ)
124 Print(
"wrong table %d=%d in %s:%d\n",i,r->m_nfPlus1Table[i],f,l);
128 }
while (i<r->m_nfCharQ);
131 #define nfTest(N, R) nfDBTest(N,__FILE__,__LINE__, R) 142 return (
long)r->m_nfCharQ == (long)a;
153 if (0L == (
long)a)
return FALSE;
154 return (
long)r->m_nfM1 == (long)a;
177 if (((
long)a == (
long)r->m_nfCharQ) || ((
long)b == (
long)r->m_nfCharQ))
178 return (number)(long)r->m_nfCharQ;
180 int i=(
int)((long)a+(
long)
b);
181 if (
i>=r->m_nfCharQ1)
i-=r->m_nfCharQ1;
185 return (number)(long)i;
196 if (i==0)
return (number)(long)r->m_nfCharQ;
197 while (i < 0) i += r->m_nfCharP;
198 while (i >= r->m_nfCharP) i -= r->m_nfCharP;
199 if (i==0)
return (number)(long)r->m_nfCharQ;
203 c=r->m_nfPlus1Table[c];
207 nfTest((number)(
long)c, r);
209 return (number)(long)c;
233 if((
long)r->m_nfCharQ == (
long)n)
return -1;
234 return (
int)((long)n);
256 if ((
long)R->m_nfCharQ == (
long)a)
return b;
257 if ((
long)R->m_nfCharQ == (
long)b)
return a;
259 if ((
long)a >= (
long)b)
262 zab = (long)a-(
long)
b;
267 zab = (long)b-(
long)
a;
272 if (R->m_nfPlus1Table[zab]==R->m_nfCharQ) r=(long)R->m_nfCharQ;
275 r= zb+(
long)R->m_nfPlus1Table[zab];
276 if(r>=(
long)R->m_nfCharQ1) r-=(
long)R->m_nfCharQ1;
293 if ((
long)r->m_nfCharQ == (
long)c)
return c;
294 long i=(long)c+(
long)r->m_nfM1;
295 if (i>=(
long)r->m_nfCharQ1) i-=(
long)r->m_nfCharQ1;
307 number mb =
nfNeg(b, r);
308 return nfAdd(a,mb,r);
319 return 0L == (long)a;
330 if ((
long)b==(
long)r->m_nfCharQ)
333 return (number)((long)r->m_nfCharQ);
338 if ((
long)a==(
long)r->m_nfCharQ)
339 return (number)((long)r->m_nfCharQ);
341 long s = (long)a - (
long)
b;
343 s += (long)r->m_nfCharQ1;
358 if ((
long)c==(
long)r->m_nfCharQ)
361 return (number)((long)r->m_nfCharQ);
364 nfTest(((number)((
long)r->m_nfCharQ1-(
long)c)), r);
366 return (number)((long)r->m_nfCharQ1-(
long)c);
378 return (
long)a != (long)b;
390 return (
long)a == (long)b;
446 *result = (number)0L;
455 if ((
long)a == (long)r->m_nfCharQ) rl=(long)r->m_nfCharQ;
456 else rl=((
long)a*(long)i) % (long)r->m_nfCharQ1;
457 *result = (number)rl;
469 if (*s >=
'0' && *s <=
'9')
476 if (*i > (
MAX_INT_VAL / 10)) *i = *i % r->m_nfCharP;
478 while (*s >=
'0' && *s <=
'9');
479 if (*i >= r->m_nfCharP) *i = *i % r->m_nfCharP;
505 const int N = strlen(nf_Parameter);
506 if (strncmp(s,nf_Parameter, N)==0)
509 if ((*s >=
'0') && (*s <=
'9'))
512 while (i>=r->m_nfCharQ1) i-=r->m_nfCharQ1;
548 const char *
l=strchr(s,
';')+1;
550 int i=strtol(l,&n,10);
564 WerrorS(
"error in reading minpoly from gftables");
574 if ((c==r->m_nfCharQ)||(c==-r->m_nfCharQ))
587 if (r->m_nfCharQ > 1)
590 r->m_nfPlus1Table=
NULL;
594 if (c>1) r->m_nfCharQ = c;
595 else r->m_nfCharQ = -c;
597 sprintf(buf,
"gftables/%d",r->m_nfCharQ);
603 if(!fgets( buf,
sizeof(buf), fp))
return;
604 if(strcmp(buf,
"@@ factory GF(q) table @@\n")!=0)
608 if(!fgets( buf,
sizeof(buf), fp))
616 res = sscanf(buf,
"%d %d",&r->m_nfCharP,&q);
618 while((res < 0) and (errno == EINTR));
621 r->m_nfCharQ1=r->m_nfCharQ-1;
623 r->m_nfPlus1Table= (
unsigned short *)
omAlloc( (r->m_nfCharQ)*
sizeof(
unsigned short) );
628 while ( i < r->m_nfCharQ )
630 (void)fgets( buf,
sizeof(buf),
fp);
634 while ( (i < r->m_nfCharQ) && (k < 30) )
637 if(r->m_nfPlus1Table[i]>r->m_nfCharQ)
639 Print(
"wrong entry %d: %d(%c%c%c)\n",i,r->m_nfPlus1Table[i],bufptr[0],bufptr[1],bufptr[2]);
642 if (r->m_nfPlus1Table[i]==r->m_nfCharQ)
656 r->m_nfPlus1Table[0]=r->m_nfPlus1Table[r->m_nfCharQ1];
665 Werror(
"illegal GF-table %d",r->m_nfCharQ);
673 return nfInit((
int)((
long)c), dst);
684 while (i >src->m_nfCharQ1) i-=src->m_nfCharQ1;
685 return (number)((long)i);
692 int ex=(int)((
long)c);
694 return (number)(((long)ex) / ((long)nfMapGG_factor));
696 return (number)(long)src->m_nfCharQ;
712 if ((src->m_nfCharQ % q)==0)
717 while(qq!=q) { qq *= r->m_nfCharP; n1++; }
720 while(qq!=src->m_nfCharQ) { qq *= r->m_nfCharP; n2++; }
724 int save_ch=r->m_nfCharQ;
726 int nn=r->m_nfPlus1Table[0];
732 else if ((n1 % n2)==0)
762 for(
int i = 1;
i <=
P;
i++ )
772 char *
s=(
char*)
omAlloc(11+1+strlen(p));
773 sprintf(s,
"%d,%s",r->m_nfCharQ,p);
788 return (number)(long)(
p() %(cf->m_nfCharQ+1));
802 else PrintS(
"// minpoly : ...");
831 r->cfExactDiv=
nfDiv;
875 r->nNULL = (number)0;
888 r->iNumberOfParameters = 1;
891 char ** pParameterNames = (
char **)
omAlloc0(
sizeof(
char *));
892 pParameterNames[0] =
omStrDup(name);
897 r->pParameterNames = (
const char**)pParameterNames;
902 r->m_nfPlus1Table=
NULL;
904 if (strlen(name) > 1)
909 r->has_simple_Alloc=
TRUE;
910 r->has_simple_Inverse=
TRUE;
915 Warn(
"illegal characteristic");
922 #define sixteenlog2 11.09035489 935 if( r->m_nfPlus1Table ==
NULL )
941 assume (r -> m_nfCharQ > 0);
943 r->ch = r->m_nfCharP;
static long nfInt(number &n, const coeffs)
static FORCE_INLINE char const ** n_ParameterNames(const coeffs r)
Returns a (const!) pointer to (const char*) names of parameters.
const CanonicalForm int s
const char * eati(const char *s, int *i)
static const char * nfEati(const char *s, int *i, const coeffs r)
static char nfCoeffName_buf[32]
static FORCE_INLINE BOOLEAN nCoeff_is_Zp(const coeffs r)
static BOOLEAN nfCoeffIsEqual(const coeffs, n_coeffType, void *)
static number nfRandom(siRandProc p, number, number, const coeffs cf)
number nlModP(number q, const coeffs, const coeffs Zp)
static number nfDiv(number a, number b, const coeffs r)
static BOOLEAN nfGreaterZero(number k, const coeffs r)
number ndCopyMap(number a, const coeffs aRing, const coeffs r)
static const char * nfRead(const char *s, number *a, const coeffs r)
static int nfMapGG_factor
#define omFreeSize(addr, size)
gmp_float log(const gmp_float &a)
BOOLEAN nfDBTest(number a, const char *f, const int l, const coeffs r)
static number nfSub(number a, number b, const coeffs r)
static BOOLEAN nfIsOne(number a, const coeffs r)
static number nfParameter(int i, const coeffs)
void WerrorS(const char *s)
static number nfNeg(number c, const coeffs r)
static number nfMapGG(number c, const coeffs src, const coeffs)
static void nfKillChar(coeffs r)
static number nfMapP(number c, const coeffs, const coeffs dst)
Creation data needed for finite fields.
static FORCE_INLINE int n_NumberOfParameters(const coeffs r)
Returns the number of parameters.
static void nfPower(number a, int i, number *result, const coeffs r)
static void nfReadMipo(char *s)
void nfShowMipo(const coeffs r)
Show the mininimal polynom.... NOTE: this is used by char * sleftv::String(void *d, BOOLEAN typed, int dim) (from Singular/subexpr.cc) for printing minpoly.
Coefficient rings, fields and other domains suitable for Singular polynomials.
const CanonicalForm CFMap CFMap & N
static char * nfCoeffString(const coeffs r)
int gf_tab_numdigits62(int q)
static void nfWriteShort(number a, const coeffs r)
The main handler for Singular numbers which are suitable for Singular polynomials.
void StringSetS(const char *st)
int status int void * buf
static BOOLEAN nfIsZero(number a, const coeffs r)
static number nfAdd(number a, number b, const coeffs R)
void StringAppendS(const char *st)
number(* nMapFunc)(number a, const coeffs src, const coeffs dst)
maps "a", which lives in src, into dst
static nMapFunc nfSetMap(const coeffs src, const coeffs dst)
const char *const nDivBy0
FILE * feFopen(const char *path, const char *mode, char *where, short useWerror, short path_only)
void PrintS(const char *s)
char name(const Variable &v)
static FORCE_INLINE BOOLEAN nCoeff_is_GF(const coeffs r)
const unsigned short fftable[]
static number nfMult(number a, number b, const coeffs r)
static FORCE_INLINE n_coeffType getCoeffType(const coeffs r)
Returns the type of coeffs domain.
BOOLEAN nfInitChar(coeffs r, void *parameter)
static int nfParDeg(number n, const coeffs r)
static number nfInvers(number c, const coeffs r)
static void nfWriteLong(number a, const coeffs r)
static number nfInit(long i, const coeffs r)
static char * nfCoeffName(const coeffs r)
static number nfMapGGrev(number c, const coeffs src, const coeffs)
static void nfReadTable(const int c, const coeffs r)
static void nfCoeffWrite(const coeffs r, BOOLEAN details)
int convertback62(char *p, int n)
Rational pow(const Rational &a, int e)
static BOOLEAN nfEqual(number a, number b, const coeffs r)
static BOOLEAN nfIsMOne(number a, const coeffs r)
void Werror(const char *fmt,...)
static BOOLEAN nfGreater(number a, number b, const coeffs r)