159 int j=
A.level() - 1;
164 for (
i= 0;
i <
j;
i++)
173 for (
i= 1;
i <
j;
i++)
184 for (
i=
j - 1;
i > 0;
i--)
195 eval[
i], uniFactors);
199 tmp=
normalize (biFactors, normalizingFactors[0]);
203 for (
i=
j - 1;
i > 0;
i--)
205 tmp=
normalize (moreBiFactors [
i-1], normalizingFactors [
i]);
212 int k,
l,
m, mm,
count, sizeOfUniFactors= 0;
213 int*** seperator=
new int** [
j];
216 for (
i= 0;
i <
j;
i++)
220 for (
i= 0;
i <
j;
i++)
223 for (
l= 0;
l < storeFactors [
i][0][
k].
size() - 1;
l++)
230 sizeOfUniFactors=
count;
231 else if (sizeOfUniFactors !=
count)
233 for (
m= 0;
m <
j;
m++)
235 delete [] storeFactors [
m] [0];
236 delete [] storeFactors [
m] [1];
237 delete [] storeFactors [
m];
238 for (mm= 0; mm <
k; mm++)
239 delete [] seperator [
m][mm];
240 delete [] seperator [
m];
242 delete [] storeFactors;
244 delete [] normalizingFactors;
247 seperator [
i][
k]=
new int [
count + 3];
248 seperator [
i][
k][0]=
count + 1;
249 seperator [
i][
k][1]= 0;
251 for (
l= 0;
l < storeFactors [
i][0][
k].
size() - 1;
l++)
267 int maxTerms, n, index1, index2, mmm,
found, columns, oneCount;
273 sizeOfUniFactors= seperator [0][
k][0];
274 for (n= 1; n <= sizeOfUniFactors; n++)
279 for (
i=
j - 1;
i >= 0;
i--)
281 if (maxTerms < seperator[
i][
k][n+1]-seperator[
i][
k][n])
283 maxTerms= seperator[
i][
k][n + 1]-seperator[
i][
k][n];
287 for (
i=
j - 1;
i >= 0;
i--)
291 columns += seperator [
i][
k][n+1]-seperator[
i][
k][n];
293 mat=
new int *[maxTerms];
295 for (
m= seperator[index1][
k][n];
m < seperator[index1][
k][n+1];
m++, mm++)
297 tmp1= storeFactors [index1][1][
k][
m];
298 mat[mm]=
new int [columns];
299 for (
i= 0;
i < columns;
i++)
302 for (
i=
j - 1;
i >= 0;
i--)
308 seperator[
i][
k][n], seperator[
i][
k][n+1])) >= 0)
309 mat[mm][index2 +
found - seperator [
i][
k][n]]= 1;
310 index2 += seperator [
i][
k][n+1]-seperator[
i][
k][n];
315 for (
i=
j - 1;
i >= 0;
i--)
320 for (mm= 0; mm < seperator [
i][
k][n + 1] - seperator [
i][
k][n]; mm++)
322 for (
m= 0;
m < maxTerms;
m++)
324 if (mat[
m][mm+index2] == 1)
328 if (oneCount == seperator [
i][
k][n+1]-seperator[
i][
k][n] - 1)
330 for (mm= 0; mm < seperator [
i][
k][n+1]-seperator[
i][
k][n]; mm++)
333 for (
m= 0;
m < maxTerms;
m++)
334 if (mat[
m][mm+index2] == 1)
338 for (
m= 0;
m < maxTerms;
m++)
341 for (mmm= 0; mmm < seperator[
i][
k][n+1]-seperator[
i][
k][n]; mmm++)
343 if (mat[
m][mmm+index2] == 1)
348 mat[
m][mm+index2]= 1;
352 index2 += seperator [
i][
k][n+1] - seperator [
i][
k][n];
357 for (
m= seperator[index1][
k][n];
m < seperator[index1][
k][n+1];
m++, mm++)
359 tmp1= storeFactors [index1][0][
k][
m];
361 for (
i=
j - 1;
i > -1;
i--)
365 for (mmm= 0; mmm < seperator [
i][
k][n+1]-seperator[
i][
k][n]; mmm++)
366 if (mat[mm][mmm+index2] == 1)
369 index2 += seperator [
i][
k][n+1]-seperator[
i][
k][n];
374 for (
m= 0;
m < maxTerms;
m++)
392 for (
i= 0;
i <
j;
i++)
394 delete [] storeFactors [
i] [0];
395 delete [] storeFactors [
i] [1];
396 delete [] storeFactors [
i];
398 delete [] seperator [
i][
k];
399 delete [] seperator [
i];
402 delete [] storeFactors;
403 delete [] normalizingFactors;
int status int void size_t count
CFList findNormalizingFactor1(const CFList &biFactors, const CanonicalForm &evalPoint, CFList &uniFactors)
find normalizing factors for biFactors and build monic univariate factors from biFactors
static poly normalize(poly next_p, ideal add_generators, syStrategy syzstr, int *g_l, int *p_l, int crit_comp)
factory's class for variables
CFList int & minFactorsLength
[in,out] minimal length of bivariate factors
const CanonicalForm int const CFList & evaluation
CanonicalForm patch(const CanonicalForm &F1, const CanonicalForm &F2, const CanonicalForm &eval)
patch together F1 and F2 and normalize by a power of eval F1 and F2 are assumed to be bivariate with ...
int search(const CFArray &A, const CanonicalForm &F, int i, int j)
search for F in A between index i and j
CFArray evaluate(const CFArray &A, const CFList &evalPoints)
CFList recombination(const CFList &factors1, const CFList &factors2, int s, int thres, const CanonicalForm &evalPoint, const Variable &x)
recombination of bivariate factors factors1 s. t. the result evaluated at evalPoint coincides with fa...
CFArray getTerms2(const CanonicalForm &F)
get terms of F wrt. Variable (1)
bool fdivides(const CanonicalForm &f, const CanonicalForm &g)
bool fdivides ( const CanonicalForm & f, const CanonicalForm & g )
static BOOLEAN length(leftv result, leftv arg)
CFList findNormalizingFactor2(CFList &biFactors, const CanonicalForm &evalPoint, const CFList &uniFactors)
find normalizing factors for biFactors and sort biFactors s.t. the returned biFactors evaluated at ev...