source: git/kernel/kpolys.cc @ e044528

spielwiese
Last change on this file since e044528 was e044528, checked in by Oleksandr Motsak <motsak@…>, 13 years ago
FIX: pCompareChain & pCompareChainPart
  • Property mode set to 100644
File size: 3.2 KB
Line 
1#include "mod2.h"
2
3#include <omalloc/omalloc.h>
4#include <misc/auxiliary.h>
5
6#include "polys.h"
7
8
9/* Returns TRUE if
10     * LM(p) | LM(lcm)
11     * LC(p) | LC(lcm) only if ring
12     * Exists i, j:
13         * LE(p, i)  != LE(lcm, i)
14         * LE(p1, i) != LE(lcm, i)   ==> LCM(p1, p) != lcm
15         * LE(p, j)  != LE(lcm, j)
16         * LE(p2, j) != LE(lcm, j)   ==> LCM(p2, p) != lcm
17*/
18BOOLEAN pCompareChain (poly p,poly p1,poly p2,poly lcm, const ring R)
19{
20  int k, j;
21
22  if (lcm==NULL) return FALSE;
23
24  for (j=(R->N); j; j--)
25    if ( p_GetExp(p,j, R) >  p_GetExp(lcm,j, R)) return FALSE;
26  if ( pGetComp(p) !=  pGetComp(lcm)) return FALSE;
27  for (j=(R->N); j; j--)
28  {
29    if (p_GetExp(p1,j, R)!=p_GetExp(lcm,j, R))
30    {
31      if (p_GetExp(p,j, R)!=p_GetExp(lcm,j, R))
32      {
33        for (k=(R->N); k>j; k--)
34        {
35          if ((p_GetExp(p,k, R)!=p_GetExp(lcm,k, R))
36          && (p_GetExp(p2,k, R)!=p_GetExp(lcm,k, R)))
37            return TRUE;
38        }
39        for (k=j-1; k; k--)
40        {
41          if ((p_GetExp(p,k, R)!=p_GetExp(lcm,k, R))
42          && (p_GetExp(p2,k, R)!=p_GetExp(lcm,k, R)))
43            return TRUE;
44        }
45        return FALSE;
46      }
47    }
48    else if (p_GetExp(p2,j, R)!=p_GetExp(lcm,j, R))
49    {
50      if (p_GetExp(p,j, R)!=p_GetExp(lcm,j, R))
51      {
52        for (k=(R->N); k>j; k--)
53        {
54          if ((p_GetExp(p,k, R)!=p_GetExp(lcm,k, R))
55          && (p_GetExp(p1,k, R)!=p_GetExp(lcm,k, R)))
56            return TRUE;
57        }
58        for (k=j-1; k!=0 ; k--)
59        {
60          if ((p_GetExp(p,k, R)!=p_GetExp(lcm,k, R))
61          && (p_GetExp(p1,k, R)!=p_GetExp(lcm,k, R)))
62            return TRUE;
63        }
64        return FALSE;
65      }
66    }
67  }
68  return FALSE;
69}
70#ifdef HAVE_RATGRING
71BOOLEAN pCompareChainPart (poly p,poly p1,poly p2,poly lcm, const ring R)
72{
73  int k, j;
74
75  if (lcm==NULL) return FALSE;
76
77  for (j=R->real_var_end; j>=R->real_var_start; j--)
78    if ( p_GetExp(p,j, R) >  p_GetExp(lcm,j, R)) return FALSE;
79  if ( pGetComp(p) !=  pGetComp(lcm)) return FALSE;
80  for (j=R->real_var_end; j>=R->real_var_start; j--)
81  {
82    if (p_GetExp(p1,j, R)!=p_GetExp(lcm,j, R))
83    {
84      if (p_GetExp(p,j, R)!=p_GetExp(lcm,j, R))
85      {
86        for (k=(R->N); k>j; k--)
87        for (k=R->real_var_end; k>j; k--)
88        {
89          if ((p_GetExp(p,k, R)!=p_GetExp(lcm,k, R))
90          && (p_GetExp(p2,k, R)!=p_GetExp(lcm,k, R)))
91            return TRUE;
92        }
93        for (k=j-1; k>=R->real_var_start; k--)
94        {
95          if ((p_GetExp(p,k, R)!=p_GetExp(lcm,k, R))
96          && (p_GetExp(p2,k, R)!=p_GetExp(lcm,k, R)))
97            return TRUE;
98        }
99        return FALSE;
100      }
101    }
102    else if (p_GetExp(p2,j, R)!=p_GetExp(lcm,j, R))
103    {
104      if (p_GetExp(p,j, R)!=p_GetExp(lcm,j, R))
105      {
106        for (k=R->real_var_end; k>j; k--)
107        {
108          if ((p_GetExp(p,k, R)!=p_GetExp(lcm,k, R))
109          && (p_GetExp(p1,k, R)!=p_GetExp(lcm,k, R)))
110            return TRUE;
111        }
112        for (k=j-1; k>=R->real_var_start; k--)
113        {
114          if ((p_GetExp(p,k, R)!=p_GetExp(lcm,k, R))
115          && (p_GetExp(p1,k, R)!=p_GetExp(lcm,k, R)))
116            return TRUE;
117        }
118        return FALSE;
119      }
120    }
121  }
122  return FALSE;
123}
124#endif
125
Note: See TracBrowser for help on using the repository browser.