Borderbasix

isdivisible.hpp
Go to the documentation of this file.
1 #ifndef ALREADY_isdivisible
2 #define ALREADY_isdivisible
3 //retourne 1 si m1|m2 0 sinon
4 template<typename mon>
5 int isdivisible(const mon &m1, const mon &m2, int nbvar)
6 {
7  int res=1;
8  for(int i=0;i<nbvar;i++)
9  {
10  //cout<<" isdivisble "<<m2.GetDegree(i)<<" "<<m1.GetDegree(i)<<endl;
11  if(m2.GetDegree(i)<m1.GetDegree(i))
12  { res=0;break;};
13  }
14  return res;
15 }
16 
17 template<typename mon, typename mon2, typename Base>
18 int isdivisible(const mon & m1,const mon2 & m2,const Base & b)
19 {
20  const int nbvar=b.nbvar();
21  int res=1;
22  for(int i=0;i<nbvar;i++)
23  {
24  //cout<<" isdivisble "<<m2.GetDegree(i)<<" "<<m1.GetDegree(i)<<endl;
25  if(m2.GetDegree(i)<m1.GetDegree(i))
26  { res=0;break;};
27  }
28  return res;
29 }
30 
31 template<typename mon, typename mon2, typename Base>
32 int isdivisible2(const mon & m1,const mon2 & m2,const Base & b,mon &coc)
33 {
34  const int nbvar=b.nbvar();
35  int res=1;
36  //mon coc=mon(1);
37  cout<<"m1"<<m1 <<"m2"<<m2<<endl;
38  for(int i=0;i<nbvar;i++)
39  {
40  cout<<" isdivisble "<<(int)m2.GetDegree(i)<<" "<<(int)m1.GetDegree(i)<<endl;
41  if(m2.GetDegree(i)<m1.GetDegree(i))
42  { res=0;break;};
43  }
44  cout<<"res"<<res<<endl;
45  if (res)
46  {
47  for(int i=0;i<nbvar;i++)
48  {
49 
50  coc*=mon(i,m2.GetDegree(i)-m1.GetDegree(i));
51  cout<<"coc"<<coc<<endl;
52  }
53  }
54  return res;
55 }
56 
57 template<template<typename T,typename toto> class mon,typename typcoeff,
58  char X,int d,typename T,typename Base>
59 int isdivisible(const mon<typcoeff,numexp<X,d,T> > & m1
60  ,const mon<typcoeff,numexp<X,d,T> > & m2,const Base & b)
61 {
62  static int initmask=0;
63  const int nbvar=b.nbvar();
64  int res=1;
65  T mask;
66 
67  if(initmask==0)
68  {
69  for(int i=0;i<d;i++) initmask=(initmask<<1)+1;
70  }
71  mask=initmask;
72  for(int i=0;i<nbvar;i++)
73  {
74 
75  if((m2.rep.ind&(mask))<(m1.rep.ind&(mask)))
76  { res=0;break;};
77  mask=mask<<d;
78  }
79  return res;
80 }
81 #endif //ALREADY_isdivisible
int isdivisible(const mon &m1, const mon &m2, int nbvar)
Definition: isdivisible.hpp:5
int nbvar()
Definition: types.hpp:37
Definition: numexp.hpp:26
Mon mon
Definition: solver_bb_floating.cpp:136
Definition: types.hpp:14
exponent_t GetDegree() const
Definition: Monom.hpp:70
MSKint32t MSKint32t MSKint32t i
Definition: mosek.h:2278
int isdivisible2(const mon &m1, const mon2 &m2, const Base &b, mon &coc)
Definition: isdivisible.hpp:32
Multivariate monomials.
Definition: Monom.hpp:21
Home  |  Download & InstallContributions