13 #include "factory/factory.h"
28 number nAEMult (number a, number
b,
const coeffs r);
29 number nAESub (number a, number
b,
const coeffs r);
30 number nAEAdd (number a, number
b,
const coeffs r);
31 number nAEDiv (number a, number
b,
const coeffs r);
32 number nAEIntMod (number a, number
b,
const coeffs r);
33 number nAEExactDiv (number a, number
b,
const coeffs r);
34 number nAEInit (
long i,
const coeffs r);
35 number nAEInitMPZ (mpz_t
m,
const coeffs r);
36 int nAESize (number a,
const coeffs r);
37 long nAEInt (number &a,
const coeffs r);
38 number nAEMPZ (number a,
const coeffs r);
39 number nAENeg (number c,
const coeffs r);
40 number nAECopy (number a, number
b,
const coeffs r);
41 number nAERePart (number a, number
b,
const coeffs r);
42 number nAEImPart (number a, number
b,
const coeffs r);
44 void nAEWriteLong (number a,
const coeffs r);
45 void nAEWriteShort (number a,
const coeffs r);
48 const char * nAERead (
const char *
s, number *a,
const coeffs r);
49 number nAENormalize (number a, number
b,
const coeffs r);
56 void nAEPower (number a,
int i, number *
result,
const coeffs r);
57 number nAEGetDenom (number &a,
const coeffs r);
58 number nAEGetNumerator (number &a,
const coeffs r);
59 number nAEGcd (number a, number
b,
const coeffs r);
60 number nAELcm (number a, number
b,
const coeffs r);
62 void nAEDelete (number *a,
const coeffs r);
63 number nAESetMap (number a,
const coeffs r);
64 void nAEInpMult (number &a ,number
b,
const coeffs r);
75 number nAEAdd(number a, number
b,
const coeffs)
77 int_poly*
f=
reinterpret_cast<int_poly*
> (a);
78 int_poly*
g=
reinterpret_cast<int_poly*
> (
b);
79 int_poly *
res=
new int_poly;
85 number nAEMult(number a, number
b,
const coeffs)
87 int_poly*
f=
reinterpret_cast<int_poly*
> (a);
88 int_poly*
g=
reinterpret_cast<int_poly*
> (
b);
89 int_poly *
res=
new int_poly;
91 res->poly_mult_n_to(*
g);
95 number nAESub(number a, number
b,
const coeffs)
97 int_poly*
f=
reinterpret_cast<int_poly*
> (a);
98 int_poly*
g=
reinterpret_cast<int_poly*
> (
b);
99 int_poly *
res=
new int_poly;
101 res->poly_sub_to(*
g);
106 number nAEDiv(number a, number
b,
const coeffs)
108 int_poly*
f=
reinterpret_cast<int_poly*
> (a);
109 int_poly*
g=
reinterpret_cast<int_poly*
> (
b);
110 int_poly *
res=
new int_poly;
117 number nAEIntMod(number a, number,
const coeffs)
122 number nAEExactDiv(number a, number
b,
const coeffs)
124 int_poly*
f=
reinterpret_cast<int_poly*
> (a);
125 int_poly*
g=
reinterpret_cast<int_poly*
> (
b);
126 int_poly *
res=
new int_poly;
134 number nAEInit(
long i,
const coeffs)
137 mpz_init_set_ui(
m,
i);
138 int_poly*
res=
new int_poly;
140 number res1=
reinterpret_cast<number
>(
res);
144 number nAEInitMPZ(mpz_t
m,
const coeffs)
146 int_poly*
res=
new int_poly;
148 number res1=
reinterpret_cast<number
>(
res);
153 int nAESize (number a,
const coeffs)
155 int_poly*
f=
reinterpret_cast<int_poly*
> (a);
159 long nAEInt(number &,
const coeffs)
165 number nAEMPZ(number a,
const coeffs)
171 number nAENeg(number c,
const coeffs)
173 int_poly*
f=
reinterpret_cast<int_poly*
> (c);
174 int_poly *
res=
new int_poly;
180 number nAECopy(number c,
const coeffs)
185 number nAERePart(number c,
const coeffs)
190 number nAEImPart(number c,
const coeffs)
195 void nAEWriteLong (number a,
const coeffs)
197 int_poly*
f=
reinterpret_cast <int_poly*
>(a);
202 void nAEWriteShort (number a,
const coeffs)
204 int_poly*
f=
reinterpret_cast <int_poly*
>(a);
210 const char * nAERead (
const char *, number *,
const coeffs)
217 number nAENormalize (number a, number,
const coeffs)
224 int_poly*
f=
reinterpret_cast<int_poly*
> (a);
225 int_poly*
g=
reinterpret_cast<int_poly*
> (
b);
226 if (
f->deg >
g->deg) {
return FALSE;}
232 int_poly*
f=
reinterpret_cast<int_poly*
> (a);
233 int_poly*
g=
reinterpret_cast<int_poly*
> (
b);
234 if (
f->is_equal(*
g) == 1) {
return FALSE;}
240 int_poly*
f=
reinterpret_cast<int_poly*
> (a);
241 if (
f->is_zero() == 1) {
return FALSE;}
247 int_poly*
f=
reinterpret_cast<int_poly*
> (a);
248 if (
f->is_one() == 1) {
return FALSE;}
254 int_poly*
f=
reinterpret_cast<int_poly*
> (a);
255 if (
f->is_one() == 1) {
return FALSE;}
261 if (nAEIsZero(a, r) ==
FALSE) {
return TRUE; }
262 else {
return FALSE; }
265 void nAEPower (number,
int, number *,
const coeffs)
270 number nAEGetDenom (number &,
const coeffs)
275 number nAEGetNumerator (number &a,
const coeffs)
280 number nAEGcd (number a, number
b,
const coeffs)
282 int_poly*
f=
reinterpret_cast<int_poly*
> (a);
283 int_poly*
g=
reinterpret_cast<int_poly*
> (
b);
284 int_poly *
res=
new int_poly;
285 res->poly_gcd(*
f,*
g);
289 number nAELcm (number a, number
b,
const coeffs)
291 int_poly*
f=
reinterpret_cast<int_poly*
> (a);
292 int_poly*
g=
reinterpret_cast<int_poly*
> (
b);
293 int_poly *
gcd=
new int_poly;
294 int_poly *
res=
new int_poly;
295 gcd->poly_gcd(*
f,*
g);
296 res->poly_mult_n(*
f,*
g);
301 void nAEDelete (number *,
const coeffs)
312 void nAEInpMult (number &, number,
const coeffs)
332 static char * n_AECoeffName(
const coeffs r)
334 return (
char*)(
"AE");
337 static char * nAECoeffString(
const coeffs r)
355 r->cfIntMod= nAEIntMod;
356 r->cfExactDiv= nAEExactDiv;
360 r->cfCoeffName = n_AECoeffName;
368 r->cfInpNeg = nAENeg;
373 r->cfWriteLong = nAEWriteLong;
376 r->cfGreater = nAEGreater;
377 r->cfEqual = nAEEqual;
378 r->cfIsZero = nAEIsZero;
379 r->cfIsOne = nAEIsOne;
380 r->cfIsMOne = nAEIsOne;
381 r->cfGreaterZero = nAEGreaterZero;
382 r->cfPower = nAEPower;
383 r->cfGetDenom = nAEGetDenom;
384 r->cfGetNumerator = nAEGetNumerator;
387 r->cfDelete= nAEDelete;
388 r->cfCoeffString=nAECoeffString;
390 r->cfSetMap = nAESetMap;
392 r->cfInpMult=nAEInpMult;
393 r->cfCoeffWrite=nAECoeffWrite;
398 r->has_simple_Alloc=
TRUE;
399 r->has_simple_Inverse=
TRUE;