13 #include <flint/flint.h>
14 #include <flint/nmod_poly.h>
15 #include "factory/factory.h"
30 static const char*
Eati(
const char *
s,
int *
i)
33 if (((*
s) >=
'0') && ((*
s) <=
'9'))
41 while (((*
s) >=
'0') && ((*
s) <=
'9'));
50 Print(
"flint:Z/%d[%s]",r->ch,r->pParameterNames[0]);
56 return (r->type==n) &&(r->ch==
pp->ch)
57 &&(r->pParameterNames!=
NULL)
58 &&(strcmp(r->pParameterNames[0],
pp->name)==0);
136 nmod_poly_set_coeff_ui(
res,0,
i);
145 slong ii=mpz_mod_ui(tmp,
i,r->ch);
147 nmod_poly_set_coeff_ui(
res,0,ii);
250 static const char*
Read(
const char * st, number * a,
const coeffs r)
255 *a=(number)
omAlloc(
sizeof(nmod_poly_t));
258 if (*
s==
'-') { neg=
TRUE;
s++;}
265 else if(strncmp(
s,r->pParameterNames[0],strlen(r->pParameterNames[0]))==0)
268 s+=strlen(r->pParameterNames[0]);
297 if (ac>bc)
return TRUE;
298 else if (ac<bc)
return FALSE;
386 ii=mpz_mod_ui(tmp,
i->z,dst->ch);
389 if (ii<0) ii+=dst->ch;
390 nmod_poly_set_coeff_ui(
res,0,ii);
399 WerrorS(
"not yet: ChineseRemainder");
409 nmod_poly_set_coeff_ui(
res,1,1);
419 WerrorS(
"not yet: ConvSingNFactoryN");
423 static char CoeffName_flint_Zn[20];
424 sprintf(CoeffName_flint_Zn,
"flint:Z/%d[%s]",r->ch,r->pParameterNames[0]);
425 return (
char*)CoeffName_flint_Zn;
429 char *
buf=(
char*)
omAlloc(12+10 +strlen(r->pParameterNames[0]));
430 sprintf(
buf,
"flintZ(%d,\"%s\")",r->ch,r->pParameterNames[0]);
437 int l=nmod_poly_length(aa);
439 for(
int i=
l;
i>=0;
i--)
441 ulong ul=nmod_poly_get_coeff_ui(aa,
i);
442 fprintf(
f,
"%lu ", ul);
452 for (
int i=
l;
i>=0;
i--)
455 nmod_poly_set_coeff_ui(aa,
i,ul);
532 cf->iNumberOfParameters = 1;
533 char **pn=(
char**)
omAlloc0(
sizeof(
char*));
535 cf->pParameterNames = (
const char **)pn;
Coefficient rings, fields and other domains suitable for Singular polynomials.
number(* nMapFunc)(number a, const coeffs src, const coeffs dst)
maps "a", which lives in src, into dst
const CanonicalForm int s
nmod_poly_init(FLINTmipo, getCharacteristic())
nmod_poly_clear(FLINTmipo)
void WerrorS(const char *s)
static void WriteShort(number a, const coeffs r)
static number Lcm(number a, number b, const coeffs r)
static number ConvFactoryNSingN(const CanonicalForm n, const coeffs r)
static void MPZ(mpz_t result, number &n, const coeffs r)
static number Neg(number a, const coeffs r)
static BOOLEAN Greater(number a, number b, const coeffs r)
static number Mult(number a, number b, const coeffs c)
static number Init_bigint(number i, const coeffs dummy, const coeffs dst)
static number Sub(number a, number b, const coeffs c)
static long Int(number &n, const coeffs r)
static number Init(long i, const coeffs r)
static BOOLEAN CoeffIsEqual(const coeffs r, n_coeffType n, void *parameter)
static void Normalize(number &a, const coeffs r)
static number Gcd(number a, number b, const coeffs r)
static char * CoeffString(const coeffs r)
static number ExtGcd(number a, number b, number *s, number *t, const coeffs r)
static BOOLEAN GreaterZero(number k, const coeffs r)
static BOOLEAN DBTest(number a, const char *f, const int l, const coeffs r)
static void Delete(number *a, const coeffs r)
static CanonicalForm ConvSingNFactoryN(number n, BOOLEAN setChar, const coeffs r)
BOOLEAN flintZn_InitChar(coeffs cf, void *infoStruct)
static void KillChar(coeffs r)
nmod_poly_struct * nmod_poly_ptr
static number Copy(number a, const coeffs r)
static number InitMPZ(mpz_t i, const coeffs r)
static number Div(number a, number b, const coeffs c)
static void CoeffWrite(const coeffs r, BOOLEAN details)
static void Power(number a, int i, number *result, const coeffs r)
static BOOLEAN Equal(number a, number b, const coeffs r)
static number Add(number a, number b, const coeffs c)
static BOOLEAN IsOne(number a, const coeffs r)
static number Farey(number p, number n, const coeffs)
static BOOLEAN IsZero(number a, const coeffs r)
static int ParDeg(number x, const coeffs r)
static const char * Eati(const char *s, int *i)
static nMapFunc SetMap(const coeffs src, const coeffs dst)
static number ChineseRemainder(number *x, number *q, int rl, BOOLEAN sym, CFArray &inv_cache, const coeffs)
static BOOLEAN IsMOne(number k, const coeffs r)
static void SetChar(const coeffs r)
static number ReadFd(s_buff f, const coeffs r)
static number Parameter(const int i, const coeffs r)
static number Invers(number a, const coeffs r)
static char * CoeffName(const coeffs r)
static number IntMod(number a, number b, const coeffs c)
static const char * Read(const char *st, number *a, const coeffs r)
static int Size(number n, const coeffs r)
static number ExactDiv(number a, number b, const coeffs c)
static void WriteFd(number a, FILE *f, const coeffs)
number nvInvers(number c, const coeffs r)
The main handler for Singular numbers which are suitable for Singular polynomials.
const char *const nDivBy0
void StringAppendS(const char *st)
long s_readlong(s_buff F)
int status int void * buf