1 #ifndef ALREADY_corealgo3
2 #define ALREADY_corealgo3
3 template<
typename typP,
typename typPk,
typename Base>
4 void Crochetchoix(
const typP & P,typPk & Pk, typPk & redspol,
int k,
7 template<
typename typPk>
10 typedef typename typPk::value_type
pol;
11 for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++)
14 for(
typename pol::iterator iterpol=iter->begin();iterpol!=iter->end();
17 if(!
Iszero(iterpol->GetCoeff()))
27 typename T::const_iterator iter=l2.begin();
28 for(;iter!=l2.end();iter++)
31 template<
typename mon>
36 for(
int i=0;
i<=maxi;
i++)
41 static int max_degppcm;
43 template<
typename typppcm,
typename Base>
50 list<mon> list1,list2,tmplist2;
57 for(
int i=0;
i<iter->taille2;
i++)
58 for(
int j=
i+1;
j<iter->taille2;
j++)
60 mon tmpmon=
lcm(iter->refuse[
i],iter->refuse[
j]);
62 if((!ppcm.count(tmpmon))&&
64 (iter->refuse[
i].GetDegree()+iter->refuse[
j].GetDegree())))
74 for(
int i=0;
i<iter->taille2;
i++)
75 for(
int j=
i+1;
j<iter->taille2;
j++)
77 mon tmpmon=
lcm(iter->refuse[
i],iter->refuse[
j]);
80 (iter->refuse[
i].GetDegree()+iter->refuse[
j].GetDegree())))
83 for(
int k=0;
k<iter->taille2;
k++)
88 mon lc_i=
lcm(iter->refuse[
k],iter->refuse[
i]);
89 mon lc_j=
lcm(iter->refuse[
k],iter->refuse[
j]);
98 list2.push_back(tmpmon);
106 for(
typename list<mon>::iterator iter2=list2.begin();
107 iter2!=list2.end();iter2++)
111 if(iter2->GetDegree()>maxdeg)
112 maxdeg=iter2->GetDegree();
122 if(k>max_degppcm) res=1;
126 template<
typename mon,
typename Base,
typename typppcm,
typename typMk>
128 ,
const typMk &Spoldejavu)
158 return (res==2)&&(comp==2)&&ppcm[m]&&!
member(Spoldejavu,m);
160 return (res==2)&&(comp==2)&&ppcm.count(m);
164 template<
typename typPk,
typename Base,
typename typMk>
167 typedef typename typPk::value_type::monom_t
mon;
176 for(
typename typPk::const_iterator iter1=Pk.begin();iter1!=Pk.end();iter1++)
177 for(
typename typPk::const_iterator iter2=iter1;iter2!=Pk.end();iter2++)
180 cout<<
"goodspol"<<
goodspol(iter1->ind,iter2->ind,ppcm,b,Spoldejavu)<<endl;
182 if (
goodspol(iter1->ind,iter2->ind,ppcm,b,Spoldejavu))
184 res.push_back(*iter1);
185 res.push_back(*iter2);
190 template<
typename typP>
193 int res=
Degree(P.front());
195 for(
typename typP::iterator iter=P.begin();iter!=P.end();iter++)
202 template<
typename typP>
206 for(
typename typP::const_iterator iter=P.begin();iter!=P.end();iter++)
208 if(
Degree(*iter)==
k) res.push_back(*iter);
213 template<
typename mon,
typename T,
typename monomial_server>
217 std::list<pol<mon,T> > res;
218 for(
typename std::list<
pol<mon,T> >::const_iterator iter=P.begin()
219 ;iter!=P.end();iter++)
221 if(
Degree(*iter,serv)==
k) res.push_back(*iter);
226 template<
typename typP,
typename Base>
230 for(
typename typP::const_iterator iter=tmpPk.begin();iter!=tmpPk.end();iter++)
231 for(
typename typP::value_type::const_iterator iterpol=iter->begin();
232 iterpol!=iter->end();iterpol++)
233 if(tmpvar<
lvar(iterpol->rep)) tmpvar=
lvar(iterpol->rep);
237 template<
typename typP,
typename typMk,
typename Base,
241 typedef typename typMk::value_type
mon;
246 for(
typename typP::const_iterator iter=tmpPk.begin();iter!=tmpPk.end();iter++)
248 mon tmp(choice(*iter,b,serv));
251 cout<<
"pol dans DoBaseMk "<<endl<<*iter<<endl<<
"g choisi "<<tmp<<endl;
254 for(
typename typMk::iterator iter=Mk.begin();iter!=Mk.end();iter++)
257 if(*iter==tmp) {yes=0;
break;};
259 if(yes) Mk.push_back(tmp);
262 cout<<
"Mk.size()"<<Mk.size()<<endl;
265 tmp.
refuse=(mon*)MAC_REV_MALLOC<mon>(tmp.
taille2*
sizeof(mon));
267 tmp.
accept=(mon*)MAC_REV_MALLOC<mon>(
sizeof(mon));
272 for(
typename typMk::iterator iter=Mk.begin();iter!=Mk.end();iter++,i++)
276 cout<<
"monomes refuses"<<*iter<<endl;
290 b.
def.push_back(tmp);
294 template <
typename typPk,
typename typMk,
typename typmat >
297 const typMk & lm,
const typmat &mat)
299 typedef typename typPk::value_type POL;
300 typedef typename typMk::value_type monom_t;
302 map<monom_t,int>
index;
304 if (res!=NULL) {
delete res;};
305 for(
typename typMk::const_iterator m = lm.begin(); m!=lm.end(); m++){
311 res=
new typmat(L.size(),lm.size());
314 cout<<
"L.size() "<<L.size()<<
" lm.size() "<<lm.size()<<endl;
316 for(
typename typPk::const_iterator pi = L.begin(); pi != L.end(); ++pi){
317 for(
typename POL::const_iterator m = pi->begin(); m!=pi->end(); m++)
320 if((index.count(*m)))
323 (*res)(l,c-1,m->GetCoeff());
334 template<
typename typMat,
typename typP,
typename typPk,
typename typMk,
typename Base,
typename typdump,
class monomial_server,
typename workspace>
335 void init_algo(typP &P,
int &nouveaumon,
int &maxdeg,
int &
k,
336 typPk &Pk, typMk & Mk,
Base & b, typdump & dump,
workspace &w,
339 typedef typename typPk::value_type
pol;
342 const typename typP::value_type::order_t (tmpord)(
const mon,
const mon);
351 cout<<
"Init Space"<<endl;
355 cout<<
"Init Space fini"<<endl;
367 cout<<
"Dans While"<<endl;
369 Mk.erase(Mk.begin(),Mk.end());
371 cout<<
"Dans While 1"<<endl;
375 cout<<
"Dans While 2"<<endl;
379 cout<<
"Dans While 3"<<endl;
383 cout<<
"Dans While 4"<<endl;
387 cout<<
"Dans While 5"<<endl;
389 tmpPk=
Solve(*Mat,tmpPk,&pr,&pc);
391 cout<<
"Dans While 6"<<endl;
396 cout<<
" my_rank(*Mat)"<<my_rank(*Mat)<<endl;
397 cout<<
"tmpPk.size()"<<tmpPk.size()<<endl;
399 if(my_rank(*Mat)==(
int)tmpPk.size()) flag=0;
406 cout<<
"While fini"<<endl;
408 for(
typename typP::iterator iter=tmpPk.begin();iter!=tmpPk.end();iter++)
411 cout<<
"polynomes dans PK"<<*iter<<endl;
413 Pk.push_back(convert<pol>(*iter,b,serv));
423 template<
typename pol,
typename coeff,
typename workspace>
436 cout<<
"dans myplus je calcul"<<endl<<invconv<Poly>(res)<<endl<<
437 "toto "<<toto<<endl<<
"nf"<<endl<<invconv<Poly>(nf)<<endl;
439 if(res.sizenf<nf.sizenf)
442 while(w->
sizenf<nf.sizenf)
444 for(i=0;i<nf.sizenf;i++)
447 for(i=0;i<res.sizenf;i++)
449 if(res.nfind[i]|nf.nfind[i])
451 w->
tabnf[
i]=res.nfind[
i]|nf.nfind[
i];
454 if ((res.nfind[i]>>
j)&1)
460 if((nf.nfind[i]>>
j)&1)
470 for(i=res.sizenf;i<nf.sizenf;i++)
474 if ((nf.nfind[i]>>
j)&1)
477 w->
tabcoeff[8*i+
j]=((mcoeff_t)-1)*toto*(nf.
nf[q-1]);
483 for(
int i=0;i<nf.sizenf;i++)
486 ,tmpsize*
sizeof(
COEFF));
488 res.nfind=(
unsigned char*)realloc(res.nfind,nf.sizenf);
489 res.sizenf=nf.sizenf;
491 for(
int i=0;i<nf.sizenf;i++)
509 while(w->
sizenf<res.sizenf)
511 for(i=0;i<res.sizenf;i++)
513 for(i=0;i<nf.sizenf;i++)
518 unsigned char mask=1;
520 if(res.nfind[i]==255)
524 for(
int j=0;
j<8;
j++,mask<<=1)
527 if (res.nfind[i]&mask)
533 unsigned char mask=1;
536 for(
int j=0;
j<8;
j++,mask<<=1)
543 for(
int j=0;
j<8;
j++,mask<<=1)
553 if(res.nfind[i]|nf.nfind[i])
555 w->
tabnf[
i]=res.nfind[
i]|nf.nfind[
i];
558 if ((res.nfind[i]>>
j)&1)
562 if((nf.nfind[i]>>
j)&1)
569 for(i=nf.sizenf;i<res.sizenf;i++)
573 if ((res.nfind[i]>>
j)&1)
582 for(
int i=0;i<res.sizenf;i++)
585 ,tmpsize*
sizeof(
COEFF));
589 for(
int i=0;i<res.sizenf;i++)
608 cout<<
"k "<<
k<<
" tmpsize "<<tmpsize<<endl;
610 for(
int i=0;i<res.sizenf;i++)
613 if ((res.nfind[i]>>
j)&1)
615 cout<<
"j'ai fait n'importe quoi ici"<<endl;
616 cout<<
"les resultat "<<endl<<invconv<Poly>(res)<<endl;
620 template<
typename pol,
typename coeff>
628 mcoeff_t *tmpnf,*tmpspace;
629 unsigned char *tmpnfind;
631 cout<<
"dans myplus je calcul"<<endl<<invconv<Poly>(res)<<endl<<
632 "toto "<<toto<<endl<<
"nf"<<endl<<invconv<Poly>(nf)<<endl;
634 if(res.sizenf<nf.sizenf)
637 MAC_REV_MALLOC<mcoeff_t>(
sizeof(mcoeff_t)*nf.sizenf*8);
638 for(
int i=0;
i<nf.sizenf*8;
i++)
640 for(
int i=0;
i<res.sizenf;
i++)
641 tmpsize+=
nbbits[res.nfind[
i]|nf.nfind[
i]];
642 for(
int i=0;
i<nf.sizenf;
i++)
645 MAC_REV_MALLOC<mcoeff_t>(
sizeof(mcoeff_t)*tmpsize);
646 tmpnfind=(
unsigned char*)
647 MAC_REV_MALLOC<unsigned char>(nf.sizenf);
648 memset(tmpnfind,0,nf.sizenf);
650 for(
int i=0;
i<res.sizenf;
i++)
652 if(res.nfind[
i]|nf.nfind[
i])
655 if ((res.nfind[
i]>>
j)&1)
656 tmpspace[8*
i+
j]=res.
nf[p++];
657 if((nf.nfind[
i]>>
j)&1)
658 tmpspace[8*
i+
j]-=toto*nf.
nf[q++];
660 tmpnfind[
i]=res.nfind[
i]|nf.nfind[
i];
663 for(
int i=res.sizenf;
i<nf.sizenf;
i++)
667 if ((nf.nfind[
i]>>
j)&1)
668 tmpspace[8*
i+
j]=((mcoeff_t)-1)*toto*(nf.
nf[q++]);
669 tmpnfind[
i]=nf.nfind[
i];
671 for(
int i=0;
i<nf.sizenf;
i++)
674 if ((tmpnfind[i]>>
j)&1)
677 tmpnf[k++]=tmpspace[8*i+
j];
679 tmpnfind[
i]&=~(1<<
j);
681 MAC_REV_FREE<mcoeff_t>(tmpspace,nf.sizenf*8*
sizeof(mcoeff_t));
682 res.sizenf=nf.sizenf;
687 MAC_REV_MALLOC<mcoeff_t>(
sizeof(mcoeff_t)*res.sizenf*8);
688 for(
int i=0;
i<res.sizenf*8;
i++)
690 for(
int i=0;
i<nf.sizenf;
i++)
691 tmpsize+=
nbbits[res.nfind[
i]|nf.nfind[
i]];
692 for(
int i=0;
i<res.sizenf;
i++)
695 MAC_REV_MALLOC<mcoeff_t>(
sizeof(mcoeff_t)*tmpsize);
696 tmpnfind=(
unsigned char*)
697 MAC_REV_MALLOC<unsigned char>(res.sizenf);
699 for(
int i=0;
i<nf.sizenf;
i++)
701 if(res.nfind[
i]|nf.nfind[
i])
704 if((res.nfind[
i]>>
j)&1)
705 tmpspace[8*
i+
j]=res.
nf[p++];
706 if((nf.nfind[
i]>>
j)&1)
707 tmpspace[8*
i+
j]-=toto*nf.
nf[q++];
709 tmpnfind[
i]=res.nfind[
i]|nf.nfind[
i];
712 for(
int i=nf.sizenf;
i<res.sizenf;
i++)
716 if((res.nfind[
i]>>
j)&1)
717 tmpspace[8*
i+
j]=res.
nf[p++];
718 tmpnfind[
i]=res.nfind[
i];
721 for(
int i=0;
i<res.sizenf;
i++)
724 if ((tmpnfind[i]>>
j)&1)
727 tmpnf[k++]=tmpspace[8*i+
j];
729 tmpnfind[
i]&=~(1<<
j);
731 MAC_REV_FREE<mcoeff_t>(tmpspace,res.sizenf*8*
sizeof(mcoeff_t));
734 cout<<
"k "<<k<<
" tmpsize "<<tmpsize<<endl;
736 MAC_REV_FREE<mcoeff_t>(res.
nf,res.
size*
sizeof(mcoeff_t));
738 MAC_REV_FREE<unsigned char>(res.nfind,res.sizenf);
742 res.
nf=(mcoeff_t*)MAC_REV_REALLOC<mcoeff_t>(res.
nf,res.
size*
sizeof(mcoeff_t)
743 ,k*
sizeof(mcoeff_t));
751 for(
int i=0;
i<res.sizenf;
i++)
754 if ((tmpnfind[i]>>
j)&1)
756 cout<<
"j'ai fait n'importe quoi ici"<<endl;
757 cout<<
"les resultat "<<endl<<invconv<Poly>(res)<<endl;
764 template<
typename mon,
typename Base>
784 template<
typename typpol,
typename typdump,
typename Base>
785 typpol
nf(
int var ,
int indmon,
const typdump &dump,
const Base & b)
789 typedef typename typdump::value_type
dumpstruct;
797 typename typdump::const_iterator iter;
802 for(iter=dump.begin();
803 (iter!=dump.end()) && (iter->k!=deg);iter++);
812 for(i=0;i<iter->size;i++)
815 if(iter->nf[i].ind.rep==tmpmon.
rep)
830 void getperm(
int *perm,
int sizeperm,
int *indextab)
832 int median=indextab[sizeperm/2],
i,
j=sizeperm-1;
835 if(indextab[i]>median)
838 indextab[
j]=indextab[
i];
842 perm[sizeperm/2]=sizeperm-
i;
843 getperm(perm,sizeperm-i-1,indextab);
844 getperm(perm+sizeperm-i,i,indextab+sizeperm-i);
848 template<
typename typpol,
typename typdump,
typename Base,
typename mon,
850 typpol
inline mult(
int i,
const typpol &
pol,
const typdump &dump,
854 typedef typename typpol::coeff_t coeff;
855 static const mon monzero=
mon(0);
858 (*exce)=(
mon*)MAC_REV_MALLOC<mon>((pol.size+1)*
sizeof(
mon));
859 int *stockindicetab=(
int*)
malloc(pol.size*
sizeof(
int));
860 int noquo=0,maxind=0,p=0;
864 for(
int j=0;
j<pol.sizenf;++
j)
868 if((pol.nfind[
j]>>
k)&1)
870 int stockindice2=serv.
mulind(8*
j+
k,i,b);
872 stockindice2=-1*(8*
j+
k)-1;
873 stockindicetab[p++]=stockindice2;
877 if (stockindice2>=maxind)
896 cout<<
" a '"<<q<<endl;
900 if(stockindicetab[
j]>=0)
906 cout<<
"le monome la "<<tmpmm<<
" "<<pol.nf[
j]<<endl;
910 w.
tabnf[stockindicetab[
j]/8]|=1<<(stockindicetab[
j]%8);
916 tmp=serv.nf(i,-1*(stockindicetab[
j]+1),dump,b);
938 unsigned *tmpptr=(
unsigned*)tmp.nfind;
940 for(k=0;k<tmp.sizenf/
sizeof(
unsigned);k++)
943 ((
unsigned*)w.
tabnf)[
k]|=tmpptr[
k];
945 for(l=0;l<8*
sizeof(unsigned);l++,mask<<=1)
949 -=pol.nf[
j]*tmp.nf[compteurtmp++];
955 for(k=tmp.sizenf-(tmp.sizenf%
sizeof(
unsigned))
961 for(l=0;l<8;l++,mask<<=1)
963 if(tmp.nfind[k]&mask)
964 w.
tabcoeff[8*k+l]-=pol.nf[
j]*tmp.nf[compteurtmp++];
971 for(
int k=0;k<tmp.sizenf;k++)
975 if(tmp.nfind[k]==255)
977 unsigned char mask=1;
979 for(
int l=0;l<8;l++,mask<<=1)
982 pol.nf[
j]*tmp.nf[compteurtmp++];
989 unsigned char mask=1;
991 for(
int l=0;l<8;l++,mask<<=1)
992 if(tmp.nfind[k]&mask)
995 pol.nf[
j]*tmp.nf[compteurtmp++];
1008 (*exce)[noquo]=
mon(i,1);
1009 serv.
int2mon(-1*(stockindicetab[
j]+1),tmpmon);
1010 (*exce)[noquo]*=tmpmon;
1011 (*exce)[noquo]*=pol.nf[
j];
1017 (*exce)[noquo++]=ret.ind;
1019 (*exce)=(
mon*)MAC_REV_REALLOC<mon>((*exce),(pol.size+1)*
sizeof(
mon)
1020 ,(noquo)*
sizeof(
mon));
1022 for(
int j=0;
j<exsize;
j++)
1023 cout<<
" "<<(*exce)[
j];
1026 ret.ind.SetCoeff(noquo+1);
1036 cout<<
" val p "<<p<<
" et pol.size "<<pol.size<<endl;
1038 ret.nf=(coeff*)MAC_REV_MALLOC<coeff>(ret.size*
sizeof(coeff));
1040 ret.nfind=(
unsigned char *)
malloc(ret.sizenf);
1042 for(
int j=0;
j<ret.sizenf;
j++)
1046 for(
int k=0;
k<8;
k++)
1056 ret.nfind[
j]&=~(1<<
k);
1061 ret.nf=(coeff*)MAC_REV_REALLOC<coeff>(ret.nf,ret.size*
sizeof(coeff),
1065 free(stockindicetab);
1067 cout<<
"ret.size "<<ret.size<<endl;
1068 cout<<invconv<Poly>(ret)<<endl;
1069 cout<<
"-----------------------------------"<<endl;
1071 for(
int i=0;i<ret.sizenf;i++)
1073 for(
int j=0;
j<8;
j++)
1074 if ((ret.nfind[i]>>
j)&1)
1075 if (
Iszero(ret.nf[cpt++]))
1076 cout<<
"nimpici"<<endl;
1082 template <
typename Mon,
typename Base>
1098 template<
typename typmon,
typename Base>
1105 for(j=0;j<b.
nbvar();j++)
1116 template<
typename typPk,
typename typP,
typename typexceed,
1121 typedef typename typP::value_type polalp;
1122 typedef typename polalp::order_t ord;
1123 typedef typename polalp::monom_t
mon;
1124 typedef typename typPk::value_type
pol;
1126 coeff * tabcoeff=NULL;
1127 unsigned char *tabindices=NULL;
1128 int tabsize=0,tabnfsize=0;
1130 for(
typename typP::iterator iter=P.begin();iter!=P.end();iter++)
1139 for(
typename polalp::iterator iterpol=iter->begin();
1140 iterpol!=iter->end();iterpol++)
1143 cout<<
"iterpol"<<*iterpol<<endl;
1144 cout<<
"IsinB(*iterpol,b)"<<
IsinB(*iterpol,b)<<endl;
1145 cout<<
"serv.mon2int(*iterpol)"<<serv.
mon2int(*iterpol)<<endl;
1147 if (
IsinB(*iterpol,b) && (serv.
mon2int(*iterpol)>maxind))
1148 maxind=serv.
mon2int(*iterpol);
1150 cout<<
"maxind"<<maxind<<endl;
1153 tabcoeff=(coeff*)MAC_REV_MALLOC<coeff>((maxind+1)*
sizeof(coeff));
1154 tabindices=(
unsigned char*)
malloc(maxind/8+1);
1157 tabnfsize=maxind/8+1;
1158 memset((
void*)tabindices,0,tabnfsize);
1161 for(i=0;i<tabsize;i++)
1170 cout<<
"iter->size()"<<iter->size()<<endl;
1172 tmpex=(mon*)MAC_REV_REALLOC<mon>((
void*)tmpex,0,iter->size()
1175 for(
typename polalp::iterator iterpol=iter->begin();
1176 iterpol!=iter->end();iterpol++)
1179 cout<<
"IsinB("<<*iterpol<<
","<<
"b)"<<
IsinB(*iterpol,b)<<endl;
1181 if (
IsinB(*iterpol,b))
1184 cout<<
"dedans"<<endl;
1186 int tmp=serv.
mon2int(*iterpol);
1187 tabcoeff[tmp]=iterpol->GetCoeff();
1188 tabindices[tmp/8]|=1<<(tmp%8);
1196 cout<<
"y en a un qu'est pas dans B "<<*iterpol<<endl;
1198 if(!
Iszero(iterpol->GetCoeff()))
1199 tmpex[comp++]=*iterpol;
1203 tmpex=(mon*)MAC_REV_REALLOC<mon>((
void*)tmpex,iter->size()*
sizeof(
mon)
1204 ,(comp+1)*
sizeof(
mon));
1206 tmp.
nf=(coeff*)MAC_REV_MALLOC<coeff>(tmp.
size*
sizeof(coeff));
1207 tmp.nfind=tabindices;
1208 tmp.sizenf=tabnfsize;
1213 for(
int i=0;i<tabnfsize;i++)
1216 for(
int j=0;
j<8;
j++)
1217 if (((tabindices[i]>>
j)&1) && !
Iszero(tabcoeff[8*i+
j]))
1218 tmp.
nf[maxind++]=tabcoeff[8*i+
j];
1220 tmp.nfind[i]&=~(1<<
j);
1222 tmp.
nf=(coeff*)MAC_REV_REALLOC<coeff>(tmp.
nf,tmp.
size*
sizeof(coeff)
1223 ,maxind*
sizeof(coeff));
1225 MAC_REV_FREE<coeff>(tabcoeff,tabsize*
sizeof(coeff));
1227 ex.push_back(tmpex);
1228 sizeex.push_back(comp);
1230 cout<<
"ici dans conv merge"<<endl;
1231 for(
int i=0;i<comp;i++)
1232 cout<<tmpex[i]<<
" ";
1238 template<
typename typMk>
1239 int member(
const typMk & tmpMk,
const typename typMk::value_type
mon)
1242 for(
typename typMk::const_iterator iter=tmpMk.begin();
1243 iter!=tmpMk.end();iter++)
1244 if(iter->rep==mon.rep) {res=1;
break;}
1248 template<
typename typP,
typename typttmpP,
typename typPk,
typename typMk,
1249 typename typdump,
typename Base,
typename typrecall,
1250 typename typexceed,
typename typsizeexceed,
typename typserv>
1252 typMk &tmpMk, typPk &Pk, typMk &Mk,
1254 Base &b,
int & flagdoplus,
int &
k, typrecall & recall,
1256 typsizeexceed &sizeexceed, typserv &serv)
1259 typrecall verytmp=
Crochet(recall,k+1,serv);
1260 proj(ttmpP,dump,b,serv);
1268 cout<<
"apres minmax deg "<<tmpdeg<<
" "<<k<<endl;
1274 cout<<
"un des pol de pretendu degre le bon se reduit mal"<<endl;
1278 recover(tmpPk,Mk,dump,tmpdeg);
1281 forget(b,dump,tmpdeg,recall);
1282 serv.compress(tmpPk,dump,b,tmpdeg);
1283 verytmp.erase(verytmp.begin(),verytmp.end());
1286 Mk.erase(Mk.begin(),Mk.end());
1287 for (
typename typPk::iterator iterpk=tmpPk.begin();
1288 iterpk!=tmpPk.end();iterpk++)
1290 if (
IsinB(iterpk->ind,b))
1293 ;iterb!=b.
end();iterb++)
1295 iterb->refuse=(
mon*)MAC_REV_REALLOC<mon>
1296 (iterb->refuse,(iterb->taille2)*
sizeof(
mon),
1297 (iterb->taille2+1)*
sizeof(
mon));
1298 iterb->refuse[iterb->taille2]=iterpk->ind;
1299 iterb->refuse[iterb->taille2].SetCoeff(1);
1304 for(
typename typPk::iterator iter=tmpPk.begin()
1305 ;iter!=tmpPk.end();iter++)
1307 mon *tmp=(
mon*)MAC_REV_MALLOC<mon>(
sizeof(
mon));
1309 tmpMk.push_back(*tmp);
1310 exceed.push_back(tmp);
1311 sizeexceed.push_back(1);
1320 template<
typename typPk,
typename typMk,
typename typdump,
typename Base,
1321 typename typexceed,
typename typsizeexceed,
typename typrecall,
1322 typename typwork,
typename typserv>
1325 typsizeexceed &sizeexceed,
Base &b,
int &
k,
1326 typrecall & recall, typwork &w, typserv &serv)
1328 typedef typename typdump::value_type
dumpstruct;
1330 serv.reinit_multiple();
1338 for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++)
1341 cout<<
"avant gooddir l'ind "<<iter->ind<<endl;
1342 cout<<
"GoodDir((*iter).ind,i,b)"<<
GoodDir((*iter).ind,
i,b)<<endl;
1346 mon tmpmon=iter->ind*
mon(
i,1);
1349 cout<<
"member(tmpMk,tmpmon)"<<
member(tmpMk,tmpmon)<<endl;
1351 if(!
member(tmpMk,tmpmon))
1353 typename typrecall::iterator iterrec;
1354 tmpMk.push_back(tmpmon);
1358 tmpPk.push_back(
mult(
i,*iter,dump,b,&tmp,tmpsize,w,serv));
1361 exceed.push_back(tmp);
1362 sizeexceed.push_back(tmpsize);
1372 template<
typename typMat,
typename typPk,
typename typMk,
typename typexceed,
1373 typename typsizeexceed,
typename typP>
1375 typMk &tmpMk, typexceed &exceed,
1376 typsizeexceed &sizeexceed, typP &P)
1378 typedef typename typP::value_type::order_t ord;
1379 typedef typename typPk::value_type
pol;
1381 typedef typename typP::value_type polyalp;
1384 map<mon,int,ord> mapint;
1385 typename typMk::iterator itermk=tmpMk.begin();
1386 typename typPk::iterator iterpk=tmpPk.begin();
1387 typename list<mon*>::iterator iterex=exceed.begin();
1388 list<int>::iterator itersize=sizeexceed.begin();
1390 mat.nrow=tmpPk.size();
1391 mat.ncol=tmpMk.size();
1392 ncol=(
int*)calloc(mat.ncol,
sizeof(
int));
1394 for(
int i=0;itermk!=tmpMk.end();
i++,itermk++)
1398 iterpk=tmpPk.begin();
1400 for(;iterpk!=tmpPk.end();iterpk++,iterex++,itersize++,line_num++)
1405 for(
int i=0;*itersize>
i;i++)
1408 if (mapint.count((*iterex)[i]))
1410 ++ncol[mapint[(*iterex)[
i]]];
1419 cout<<
"nnz of matrix "<<nnz<<endl;
1422 void * toto=MAC_REV_MALLOC<coeff>(nnz*
sizeof(
typename typMat::coeff_t));
1423 if (mat.nzval!=NULL) MAC_REV_FREE<typename typMat::coeff_t>
1425 *
sizeof(
typename typMat::coeff_t));
1429 if(mat.rowind!=NULL)
free(mat.rowind);
1430 mat.rowind=(
int*)
malloc(nnz*
sizeof(
int));
1431 if(mat.colptr!=NULL)
free(mat.colptr);
1432 mat.colptr=(
int*)
malloc((mat.ncol+1)*
sizeof(int));
1434 cout<<
"matrix of size "<<mat.nrow<<
"x"<<mat.ncol<<endl;
1437 typename typMat::coeff_t* nzval=(
typename typMat::coeff_t*)mat.nzval;
1438 int *rowind=mat.rowind;
1439 int *colptr=mat.colptr;
1442 for(
int i=0;
i<mat.ncol-1;
i++)
1444 colptr[
i+1]=colptr[
i]+ncol[
i];
1446 colptr[mat.ncol]=mat.nnz;
1453 itermk=tmpMk.begin();
1454 iterpk=tmpPk.begin();
1455 iterex=exceed.begin();
1456 itersize=sizeexceed.begin();
1458 for(;(iterpk!=tmpPk.end());iterpk++,iterex++,itersize++,line_num++)
1461 for(
int i=0;*itersize>
i;i++)
1463 const coeff stock=(*iterex)[
i].GetCoeff();
1464 (*iterex)[
i].SetCoeff(1);
1465 const unsigned int tmpplusex=mapint[(*iterex)[
i]]+1;
1466 const unsigned int tmpex=mapint[(*iterex)[
i]];
1467 nzval[colptr[tmpplusex]-ncol[tmpex]]
1469 rowind[colptr[tmpplusex]-ncol[tmpex]]=line_num;
1473 MAC_REV_FREE<mon>(*iterex,*itersize*
sizeof(
mon));
1478 for(
typename typPk::iterator iterpk=tmpPk.begin()
1479 ;iterpk!=tmpPk.end();iterpk++)
1480 iterpk->ind.SetCoeff(1);
1483 template<
typename typMat,
typename typPk,
typename typP,
1484 typename typMk,
typename Base,
typename typdump,
typename typrecall,
1487 int &
k,
Base &b, typdump &dump,typrecall &recall,
1490 typedef typename typMk::value_type
mon;
1491 typedef typename typP::value_type::order_t ord;
1492 typedef typename typPk::value_type
pol;
1494 typedef typename typP::value_type polyalp;
1495 typPk tmpPk,tmpPk1,workvect;
1498 list<int> sizeexceed;
1502 cerr<<
"k on entering newpkmkmatrixof "<<k<<endl;
1509 Mk, dump, b, flagdoplus, k, recall, exceed, sizeexceed, serv);
1514 compute_newpol(Pk,tmpPk,tmpMk,dump,exceed,sizeexceed, b, k, recall, w,serv);
1517 conv_merge(tmpPk,ttmpP,exceed,sizeexceed,b,serv);
1546 template<
typename typdump,
typename mon,
typename pol>
1550 typename typdump::const_iterator iter=dump.begin();
1551 for(;(iter!=dump.end())&&(iter->k!=d);iter++);
1553 if(iter!=dump.end())
1555 for(i=0;(i<iter->size)&&(iter->nf[i].ind.rep!=m.
rep);i++);
1579 template<
typename iterator,
typename mon,
typename Base>
1584 if(iter1->ind.GetDegree(
i)>iter2->ind.GetDegree(
i))
1586 if(iter2->ind.GetDegree(
i)>iter1->ind.GetDegree(
i))
1591 template <
typename mon,
typename pol,
typename typdump,
typename Base,
1593 pol
halfred(
const mon &targetind,
const pol & p,
const typdump & dump
1599 int *place=(
int*)MAC_REV_MALLOC<int>(p.
size*
sizeof(
int)),comp=0;
1610 for(i=0;i<b.
nbvar();i++)
1629 for(i=0;i<p.sizenf;i++)
1634 cout<<nbbitsun<<
" p.nfind[i] "<<(int)p.nfind[i]<<endl;
1636 nbbitsun+=
nbbits[p.nfind[i]];
1637 for(
int j=0;
j<8;
j++)
1639 if((p.nfind[i]>>
j)&1)
1643 place[comp]=serv.
mulind(8*i+
j,varref,b);
1645 place[comp]=-1*(8*i+
j+1);
1646 if (place[comp]>maxref)
1662 place[comp]=indtmpmon;
1666 place[comp]=-1*(8*i+
j);
1674 tmpspace=(coeff*)MAC_REV_MALLOC<coeff>((maxref/8+1)*8*
sizeof(coeff));
1676 cout<<
"comp "<<comp<<
" et p.size "<<p.
size<<endl;
1678 res.sizenf=(maxref/8+1);
1679 for(
int j=0;
j<8*res.sizenf;
j++)
1681 res.nfind=(
unsigned char*)MAC_REV_MALLOC<unsigned char>(res.sizenf);
1682 memset(res.nfind,0,res.sizenf);
1683 for(
int j=0;
j<nbbitsun;
j++)
1689 cout<<
"le monome la "<<tmpmm<<
" "<<p.
nf[
j]<<endl;
1691 tmpspace[place[
j]]+=p.
nf[
j];
1692 res.nfind[place[
j]/8]|=1<<(place[
j]%8);
1698 tmp=serv.nf(varref,-1*place[
j]-1,dump,b);
1703 tmp=nf<typpol>(tmpmon,dump,b);
1711 if(tmp.sizenf>res.sizenf)
1713 res.nfind=(
unsigned char*)realloc(res.nfind,tmp.sizenf);
1714 for(
int k=res.sizenf;
k<tmp.sizenf;
k++)
1716 tmpspace=(coeff*)MAC_REV_REALLOC<coeff>(tmpspace,
1717 res.sizenf*8*
sizeof(coeff),
1718 tmp.sizenf*8*
sizeof(coeff));
1719 for(
int k=res.sizenf*8;
k<tmp.sizenf*8;
k++)
1721 res.sizenf=tmp.sizenf;
1724 for(
int k=0;
k<tmp.sizenf;
k++)
1728 for(
int l=0;l<8;l++)
1729 if((tmp.nfind[
k]>>l)&1)
1730 tmpspace[8*
k+l]-=p.
nf[j]*tmp.
nf[compteurtmp++];
1732 res.nfind[
k]|=tmp.nfind[
k];
1738 serv.
int2mon(-1*place[j]-1,tmpmon);
1739 tmpmon*=
mon(varref,1);
1741 cout<<i<<
" "<<serv.
int2mon_[i]<<endl;
1742 cout<<
"monom "<<tmpmon<<
" "<<-1*place[j]
1743 <<
" "<<p.
nf[j]<<endl;
1744 cerr<<
"Je n'aurrai pas du passer par la "<<endl;
1750 for(
int j=0;
j<res.sizenf;
j++)
1753 res.
nf=(coeff*)MAC_REV_MALLOC<coeff>(comp*
sizeof(coeff));
1756 for(
int j=0;
j<res.sizenf;
j++)
1758 for(
int k=0;
k<8;
k++)
1759 if((res.nfind[
j]>>
k)&1)
1761 if(tmpspace[8*
j+
k]!=0)
1762 {res.
nf[comp++]=tmpspace[8*
j+
k];}
1764 res.nfind[
j]&=~(1<<
k);
1766 res.
nf=(coeff*)MAC_REV_REALLOC<coeff>(res.
nf,res.
size*
sizeof(coeff)
1767 ,comp*
sizeof(coeff));
1769 MAC_REV_FREE<coeff>(tmpspace,res.sizenf*8*
sizeof(coeff));
1775 template <
typename typPk,
typename typdump,
typename Base,
1777 void ReduceSpol(typPk &S,
const typdump & dump,typPk &redspol,
const Base &b
1781 typedef typename typPk::value_type
pol;
1785 list<typPk> membermon;
1787 cout<<
"en entree de RedSpol S.size "<<S.size()/2<<endl;
1789 for(
typename typPk::iterator iterS=S.begin();iterS!=S.end();iterS++,iterS++)
1791 typename typPk::iterator iterS2=iterS;
1792 typename list<mon>::iterator itermon=leadmon.begin();
1793 typename list<typPk>::iterator itermemb=membermon.begin();
1794 mon var1,var2,tmpleadmon;
1796 varmult(iterS,iterS2,var1,var2,b);
1797 tmpleadmon=iterS->ind*var1;
1799 for(;itermon!=leadmon.end()&&itermon->rep!=tmpleadmon.
rep;
1800 itermon++,itermemb++);
1801 if(itermon!=leadmon.end())
1804 for(
typename typPk::iterator tmpiter=itermemb->begin();
1805 tmpiter!=itermemb->end();tmpiter++)
1807 if(tmpiter->ind.rep==iterS->ind.rep) yes1=0;
1808 if(tmpiter->ind.rep==iterS2->ind.rep) yes2=0;
1810 if(yes1) itermemb->push_back(*iterS);
1811 if(yes2) itermemb->push_back(*iterS2);
1816 leadmon.push_back(tmpleadmon);
1818 membermon.push_back(verytmp);
1819 membermon.back().push_back(*iterS);
1820 membermon.back().push_back(*iterS2);
1826 typename list<mon>::iterator itermon=leadmon.begin();
1827 typename list<typPk>::iterator itermemb=membermon.begin();
1828 for(;itermon!=leadmon.end();itermon++,itermemb++)
1830 typename typPk::value_type ref;
1831 typename typPk::iterator tmpiter=itermemb->begin();
1832 ref=
halfred(*itermon,*tmpiter,dump,b,serv);
1836 for(;tmpiter!=itermemb->end();tmpiter++)
1838 typename typPk::value_type redcur;
1839 redcur=
halfred(*itermon,*tmpiter,dump,b,serv);
1840 my_plus(redcur,ref,(coeff)1,&w);
1843 redspol.push_back(redcur);
1849 MAC_REV_FREE<coeff>(redcur.nf,redcur.size*
sizeof(coeff));
1850 MAC_REV_FREE<unsigned char>(redcur.nfind,redcur.sizenf);
1853 MAC_REV_FREE<coeff>(ref.nf,ref.size*
sizeof(coeff));
1854 MAC_REV_FREE<unsigned char>(ref.nfind,ref.sizenf);
1859 template<
typename typPk,
typename monomial_server>
1862 typedef typename typPk::value_type::monom_t
mon;
1866 for(
typename typPk::const_iterator iter=l.begin() ;iter!=l.end();iter++)
1870 for(
int i=0;
i<iter->sizenf;
i++)
1872 for(
int j=0;
j<8;
j++)
1873 if((iter->nfind[
i]>>
j)&1)
1880 if (iter->ind.GetCoeff()==(coeff)1)
1881 mmax=(mmax<iter->ind.GetDegree())?iter->ind.GetDegree():mmax;
1885 if(res==-1) res=mmax;
1886 res=(mmax>res)?res:mmax;
1893 template<
typename coeff,
typename typiterpk,
typename workspace,
1899 if((iterPk->sizenf>tmpind/8)&&(((iterPk->nfind[tmpind/8])>>(tmpind%8))&1))
1902 cout<<
"g trouve un gus qui a un coeff du mon choisi "<<endl;
1903 cout<<
"le voila "<<invconv<Poly>(*iterPk,serv)<<endl;
1907 for(
int j=0;8*
j<=tmpind;
j++)
1909 for(
int j=7;
j>=(tmpind % 8);
j--)
1910 if((iterPk->nfind[tmpind/8]>>
j)&1)
1914 cout<<
"i ici "<<i<<
" et iterPk->size "<<iterPk->size<<endl;
1921 for(
int j=i;
j<iterPk->size-1;
j++){
1922 iterPk->nf[
j]=iterPk->nf[
j+1];
1924 iterPk->nfind[tmpind/8]&=~(1<< (tmpind%8));
1925 iterPk->nf=(coeff*)MAC_REV_REALLOC<coeff>(iterPk->nf,
1926 iterPk->size*
sizeof(coeff),(iterPk->size-1)*
sizeof(coeff));
1929 my_plus(*iterPk,*iter,tmp,&w);
1936 template<
typename typP,
typename typPk,
typename typMk
1937 ,
typename Base,
typename typdump,
typename typrecall,
1940 ,
int &
k,typdump &dump, Base &b, typrecall & recall
1947 typedef typename typP::value_type polyalp;
1948 typedef typename polyalp::monom_t
mon;
1949 typedef typename polyalp::coeff_t coeff;
1951 for(
typename typPk::iterator iter=redspol.begin();iter!=redspol.end();iter++)
1953 cout<<
"dans newcrochetchoix"<<endl;
1954 cout<<invconv<typename typP::value_type>(*iter,serv)<<endl;
1973 typPk res=
Crochet(redspol,k,serv),tmpres;
1975 cout<<
"redspol.size "<<redspol.size()<<endl;
1976 cout<<
"res.size "<<res.size()<<endl;
1978 for(
typename typPk::iterator iter=res.begin();iter!=res.end();iter++)
1980 for(
typename typPk::iterator iterredspol=redspol.begin();
1981 iterredspol!=redspol.end();iterredspol++)
1982 if(iter->nf==iterredspol->nf)
1984 redspol.erase(iterredspol);
1989 redspol.erase(redspol.begin(),redspol.end());
1991 for(
typename typPk::iterator iter=res.begin();iter!=res.end();iter++)
1992 cout<<
"res->sizenf<< "<<invconv<polyalp>(*iter,serv)<<endl;
1994 for(
typename typPk::iterator iter=res.begin();iter!=res.end();iter++)
1997 cout<<
"un nouveau tour de boucle "<<endl;
2002 iter->ind=choice(*iter,b,serv);
2004 cout<<
" g choisi "<<iter->ind<<endl;
2005 cout<<
"le pol pas zero "<<(invconv<polyalp>(*iter,serv))<<endl;
2010 if(iter->ind.GetDegree()<
k)
2013 cout<<
"le pol qui fait chuter"<<(invconv<polyalp>(*iter,serv))
2016 k=iter->ind.GetDegree();
2021 tmpres.erase(tmpres.begin(),tmpres.end());
2022 res.erase(res.begin(),res.end());
2025 for(
typename typPk::iterator iterres=res.begin()
2026 ;iterres!=res.end();iterres++)
2028 for(
typename typPk::iterator iterredspol=redspol.begin();
2029 iterredspol!=redspol.end();iterredspol++)
2030 if(iterres->nf==iterredspol->nf)
2032 iterredspol=redspol.erase(iterredspol);
2036 for(
typename typPk::iterator iterredspol=redspol.begin();
2037 iterredspol!=redspol.end();iterredspol++)
2038 if(
Degree(*iterredspol,serv)<=
k)
2040 tmpres.push_back(*iterredspol);
2041 iterredspol=redspol.erase(iterredspol);
2045 redspol.erase(redspol.begin(),redspol.end());
2047 tmpres.erase(tmpres.begin(),tmpres.end());
2049 iter->ind=choice(*iter,b,serv);
2059 serv.
compress(Pk,redspol,dump,b,k);
2083 *iter/=iter->ind.GetCoeff();
2085 iter->ind.SetCoeff(1);
2087 tmpind=serv.
mon2int(iter->ind);
2089 for(
int j=0;8*
j<=tmpind;
j++)
2091 for(
int j=7;
j>=(tmpind % 8);
j--)
2092 if((iter->nfind[tmpind/8]>>
j)&1)
2094 for(
int j=i;
j<iter->size-1;
j++)
2095 iter->nf[
j]=iter->nf[
j+1];
2096 iter->nf=(coeff*)MAC_REV_REALLOC<coeff>(iter->nf,
2097 iter->size*
sizeof(coeff),
2098 (iter->size-1)*
sizeof(coeff));
2099 iter->nfind[tmpind/8]&=~(1<<(tmpind%8));
2102 cout<<
"apres tambouille"<<endl<<invconv<Poly>(*iter,serv)<<endl;
2117 cout<<
"tmpres ici"<<endl<<invconv<polyalp>(*iter,serv)<<endl;
2119 tmpres.push_back(*iter);
2124 for(
typename typPk::iterator iterPk=Pk.begin();iterPk!=Pk.end();iterPk++)
2128 update_crochetchoix<coeff>(iterPk,iter,tmpind,w,serv);
2130 typename typPk::iterator iterredspol=iter;
2132 for(;iterredspol!=res.end();iterredspol++)
2136 update_crochetchoix<coeff>(iterredspol,iter,tmpind,w,serv);
2139 typename typPk::iterator iterend=tmpres.end();
2141 for(iterredspol=tmpres.begin();iterredspol!=iterend;iterredspol++)
2145 update_crochetchoix<coeff>(iterredspol,iter,tmpind,w,serv);
2153 mon *tmp=(mon*)MAC_REV_MALLOC<mon>(iterb->taille1*
sizeof(mon));
2154 for(
int i=0;i<iterb->taille1;i++)
2156 tmp[tmptaille1++]=iterb->accept[i];
2157 tmp=(mon*)MAC_REV_REALLOC<mon>(tmp,iterb->taille1*
sizeof(
mon)
2158 ,tmptaille1*
sizeof(mon));
2159 MAC_REV_FREE<mon>(iterb->accept,iterb->taille1*
sizeof(
mon));
2161 iterb->taille1=tmptaille1;
2162 if(iterb->taille1==0)
2164 MAC_REV_FREE<mon>(iterb->refuse,iterb->taille2*
sizeof(
mon));
2168 iterb->refuse=(mon*)MAC_REV_REALLOC<mon>
2169 (iterb->refuse,(iterb->taille2)*
sizeof(
mon),
2170 (iterb->taille2+1)*
sizeof(
mon));
2171 iterb->refuse[iterb->taille2]=iter->ind;
2173 iterb->refuse[iterb->taille2].SetCoeff(1);
2180 for (
typename typPk::iterator iterpk=Pk.begin();iterpk!=Pk.end();iterpk++)
2183 cout<<
"iterpk->ind "<<iterpk->ind<<
"et Isinb(iterpk-ind,b) "<<
IsinB(iterpk->ind,b)<<endl;
2184 cout<<
"le pol "<<invconv<Poly>(*iterpk,serv)<<endl;
2186 if (
IsinB(iterpk->ind,b))
2190 iterb->refuse=(mon*)MAC_REV_REALLOC<mon>
2191 (iterb->refuse,(iterb->taille2)*
sizeof(
mon),
2192 (iterb->taille2+1)*
sizeof(
mon));
2193 iterb->refuse[iterb->taille2]=iterpk->ind;
2194 iterb->refuse[iterb->taille2].SetCoeff(1);
2199 #ifdef NO_TWICE_FALL
2200 for(
typename typPk::iterator iter=tmpres.begin();iter!=tmpres.end();iter++)
2201 P.push_back(invconv<polyalp>(*iter));
2204 for(
typename typPk::iterator iter=tmpres.begin();iter!=tmpres.end();iter++)
2205 P.push_back(invconv<polyalp>(*iter));
2206 cout<<
"a la fin de \A7New"<<endl;
2209 for(
typename typPk::iterator iter=tmpres.begin();iter!=tmpres.end();iter++)
2210 cout<<
"tmpres"<<endl<<invconv<polyalp>(*iter,serv)<<endl;
2211 cout<<
"tmpres.size "<<tmpres.size()<<endl;
2234 template<
typename typPk>
2238 for(
typename typPk::iterator iter=redspol.begin();
2239 iter!=redspol.end();iter++)
2242 MAC_REV_FREE<typename typPk::value_type::coeff_t>(iter->nf,iter->size*
sizeof(
typename typPk::value_type::coeff_t));
2243 MAC_REV_FREE<unsigned char>(iter->nfind,iter->sizenf);
2247 template<
typename typMk>
2250 Spoldejavu.erase(Spoldejavu.begin(),Spoldejavu.end());
2251 for(
typename typMk::const_iterator iter1=Mk.begin();iter1!=Mk.end();
2253 for(
typename typMk::const_iterator iter2=iter1;iter2!=Mk.end();
2256 typename typMk::value_type tmp=
lcm(*iter1,*iter2);
2257 if (tmp.GetDegree()==iter1->GetDegree()+1)
2258 Spoldejavu.push_back(tmp);
2262 template<
typename typP,
typename typPk,
typename typdump,
typename Base
2271 typedef typename typP::value_type polyalp;
2272 typedef list<typename typPk::value_type::monom_t> typMk;
2273 typedef typename typMk::value_type
mon;
2274 typedef typename typPk::value_type
pol;
2283 typedef tmptypmat<typename typP::value_type::coeff_t> typMat;
2285 int nouveaumon,maxdeg,
k,*pr,*pc;
2287 cout<<
"avant init"<<endl;
2289 init_algo<typMat>(P,nouveaumon,maxdeg,
k,Pk,Mk,b,dump,w,serv);
2291 cout<<
"apres init"<<endl;
2300 while(nouveaumon||(k<=maxdeg))
2304 while(!
GB_stop(k)||(k<=maxdeg))
2315 for(
int i=0;
i<p->taille1;
i++)
2317 cout<<
"p.accept[i] "<<p->accept[
i]<<endl;
2319 for(
int i=0;
i<p->taille2;
i++)
2321 cout<<
"p.refuse[i] "<<p->refuse[
i]<<endl;
2330 cout<<
"poly a la fin de la boulcle de l'algo "<<Pk.size()<<endl;
2331 for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++)
2335 cout<<invconv<typename typP::value_type>(*iter,serv)<<endl;
2348 cout<<
"Spolordsup"<<endl;
2355 cout<<endl<<
"newpkmkmatrixof"<<endl;
2361 cout<<
"killspol"<<killspol<<endl;
2364 sprintf(name,
"mat%d",toto);
2365 fic=fopen(name,
"w");
2372 if(killspol) S.erase(S.begin(),S.end());
2374 if(Mk.size()==0) nouveaumon=0;
2393 cout<<
"Avant solve "<<Pk.size()<<endl;
2396 for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++,i++)
2398 typename typP::value_type tmp=
2399 invconv<typename typP::value_type>(*iter,serv);
2400 typename typMk::iterator itermon=Mk.begin();
2402 cout<<
"itermon"<<*itermon<<endl;
2404 for(
int j=0;
j<Mat.ncol;
j++,itermon++)
2407 cout<<
"Mat(i,j)"<<Mat(i,
j)<<endl;
2410 tmp+=
typename typP::value_type(*itermon*Mat(i,
j));
2413 cout<<
"iter->ind"<<iter->ind<<endl;
2418 cout<<
"------ "<<iter->ind<<endl;
2422 cout<<
"debut du solve"<<endl;
2424 Solve(Mat,L,Pk,&pr,&pc,w);
2426 cout<<
"fin du solve"<<endl;
2436 typename typMk::iterator itermon=Mk.begin();
2437 typename typPk::iterator iter;
2438 for(iter=Pk.begin();
2439 itermon!=Mk.end();iter++,itermon++,j++)
2444 cout<<
"ligne "<<j<<
" je mets le monome "<<*itermon<<
" "<<iter->ind.GetCoeff()<<endl;
2446 iter->ind=*itermon*(iter->ind.GetCoeff());
2474 cout<<
"Apres solve "<<Pk.size()<<endl;
2475 for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++)
2476 cout<<invconv<typename typP::value_type>(*iter,serv)<<endl;
2478 if ((
unsigned)my_rank(Mat)==Mk.size())
2481 typMk tmpSpoldejavu;
2482 typPk redspol,secd=secondmembre(Mat,Pk);;
2486 cout<<
"matrice de rang plein "<<endl;
2500 if(redspol.size()==0)
2504 my_merge(Spoldejavu,tmpSpoldejavu);
2514 int tmpdeg=
mindeg(redspol,serv);
2518 cout<<
"redspol.size() "<<redspol.size()<<endl;
2522 my_merge(Spoldejavu,tmpSpoldejavu);
2533 cout<<
"Pk.size() avant Crochetchoix "<<Pk.size()<<endl;
2539 cout<<
"Pk.size apres Crochetchoix "<<Pk.size()<<
" et k "<<k<<endl;
2556 cout<<
"matrice de rang pas plein "<<endl;
2562 AddB(Mat,Pk,Mk,dump,b,serv);
2567 secd=secondmembre(Mat,Pk);
2588 for(
typename typPk::iterator iter=redspol.begin();iter!=redspol.end();iter++)
2589 P.push_back(invconv<polyalp>(*iter));
2591 if(redspol.size()==0)
2614 cout<<
"il ya un passage par mat rang pas"
2615 <<
"plein et pol non zero"<<endl;
2659 for(
typename typPk::iterator iter=redspol.begin();iter!=redspol.end();iter++)
2660 P.push_back(invconv<polyalp>(*iter));
2686 cout<<
"Apres NewCrochetchoix"<<endl;
2690 for(
int i=0;
i<p->taille1;
i++)
2692 cout<<
"p.accept[i] "<<p->accept[
i]<<endl;
2694 for(
int i=0;
i<p->taille2;
i++)
2696 cout<<
"p.refuse[i] "<<p->refuse[
i]<<endl;
2724 for(
int i=0;
i<p->taille1;
i++)
2726 cout<<
"p.accept[i] "<<p->accept[
i]<<endl;
2728 for(
int i=0;
i<p->taille2;
i++)
2730 cout<<
"p.refuse[i] "<<p->refuse[
i]<<endl;
2736 cout<<
"sortie d'algo flash et dimension "<<endl;
2745 #endif //ALREADY_corealgo3
void int2mon(const int &i, mon &res)
Definition: placemon3.hpp:664
Definition: workspace.hpp:11
void remiseenforme(typpol &p)
Definition: ugly.hpp:2
void compute_newpol(typPk &Pk, typPk &tmpPk, typMk &tmpMk, typdump &dump, typexceed &exceed, typsizeexceed &sizeexceed, Base &b, int &k, typrecall &recall, typwork &w, typserv &serv)
Definition: corealgo3.hpp:1323
void AddB(const typmat &mat, typPk &Pk, const typMk &Mk, const typexceed &exceed, const typsizeexceed &sizeexceed, const typdump &dump, typB &b, monomial_server &serv)
Definition: pol2terspecial.hpp:2470
void affdebug(const typmat &m)
Definition: io.hpp:30
#define max(a, b)
Definition: alp_f2c.H:167
list< polbis< mono, T > > & Solve(typmat &S, std::list< polbis< mono, T > > &TildePk, int **pr, int **pc, workspace &w)
Definition: pol2bisspecial.hpp:609
int GB_stop(int k)
Definition: corealgo3.hpp:119
void treat_noempty_crochet(typP &P, typttmpP &ttmpP, typPk &tmpPk, typMk &tmpMk, typPk &Pk, typMk &Mk, typdump &dump, Base &b, int &flagdoplus, int &k, typrecall &recall, typexceed &exceed, typsizeexceed &sizeexceed, typserv &serv)
Definition: corealgo3.hpp:1251
int mon2int(const mon &mm)
Definition: placemon3.hpp:679
int isdivisible(const mon &m1, const mon &m2, int nbvar)
Definition: isdivisible.hpp:5
void proj(T &Crochet, const typdump &dump, const Base &b)
Definition: proj.hpp:51
int lvar(const dynamicexp< X, E > &A)
Definition: dynamicexp.hpp:178
void stab(typPk &Pk)
Definition: corealgo3.hpp:8
void ReduceSpol(typPk &S, const typdump &dump, typPk &redspol, const Base &b, workspace &w, monomial_server &serv)
Definition: corealgo3.hpp:1777
void getperm(int *perm, int sizeperm, int *indextab)
Definition: corealgo3.hpp:830
void setorder(ptrfun tmpord)
Definition: placemon3.hpp:301
mon * int2mon_
Definition: placemon3.hpp:21
int indice2(int i, int j, const Base &b)
Definition: corealgo3.hpp:765
void Setnbvars(const typP &tmpPk, Base &b)
Definition: corealgo3.hpp:227
typpol nf(int var, int indmon, const typdump &dump, const Base &b)
Definition: corealgo3.hpp:785
list< predicat >::iterator iterator
Definition: types.hpp:20
typpol mult(int i, const typpol &pol, const typdump &dump, const Base &b, mon **exce, int &exsize, workspace &w, monomial_server &serv)
Definition: corealgo3.hpp:850
void init_multiple(int n)
Definition: placemon3.hpp:59
int Ispolzero(const pol &p)
Definition: Iszero.hpp:30
void Listedejafait(const typMk &Mk, typMk &Spoldejavu)
Definition: corealgo3.hpp:2248
int minmaxdegP(typP P, int &maxdeg)
Definition: corealgo3.hpp:191
mon * accept
Definition: types.hpp:6
int my_ord(const mon &m1, const mon &m2)
Definition: ord.hpp:2
mon lcm(const mon &m1, const mon &m2)
Definition: corealgo3.hpp:32
long flag
Definition: alp_f2c.H:52
void inverse(int *&, int)
list< predicat >::const_iterator const_iterator
Definition: types.hpp:21
void recover(typPk &Pk, typMk &Mk, const typdump &dump, int k)
Definition: dump.hpp:192
void my_plus(pol &res, const pol &nf, const coeff toto, workspace *w)
Definition: corealgo3.hpp:424
coeff * tabcoeff
Definition: workspace.hpp:12
typP Crochet(const typP &P, int k)
Definition: corealgo3.hpp:203
void Dump(const typPk &Pk, typdump &dump)
Definition: dump.hpp:48
T coeff_t
Definition: pol.hpp:9
void nextmon(const Base &b, typdump &dump, typserv &serv)
Definition: gotzman.hpp:74
pol halfred(const mon &targetind, const pol &p, const typdump &dump, const Base &b, monomial_server &serv)
Definition: corealgo3.hpp:1593
int taille1
Definition: types.hpp:5
void selectnozero(typP &ttmp)
Definition: Iszero.hpp:40
int nbvar()
Definition: types.hpp:37
int mon2int(const mon &mm)
Definition: placemon.hpp:294
typmat * MatrixOf(const typPk &L, const typMk &lm, const typmat &mat)
Definition: corealgo3.hpp:296
MSKconetypee MSKrealt MSKint32t MSKint32t j
Definition: mosek.h:2421
unsigned char * tabnf
Definition: workspace.hpp:13
Mon my_divmon(const Mon &mon, int i, const Base &b)
Definition: corealgo3.hpp:1083
void destroy_space(workspace< coeff > *w)
Definition: workspace.hpp:34
int critere_got(const Base &b, typdump &dump, typserv &serv)
Definition: gotzman.hpp:191
void int2mon(const int &i, mon &res)
Definition: placemon.hpp:288
void construct_matrix_from_newpol(typMat &mat, typPk &tmpPk, typMk &tmpMk, typexceed &exceed, typsizeexceed &sizeexceed, typP &P)
Definition: corealgo3.hpp:1374
MSKint32t k
Definition: mosek.h:2713
R rep
Definition: Monom.hpp:30
void rajoute_voisins(typPk &Pk, const typMk &Mk, const typdump &dump, Base &b, workspace &w, monomial_server &serv)
Definition: IsinB3.hpp:111
C coeff_t
Definition: Monom.hpp:26
void init_space(workspace< coeff > *w)
Definition: workspace.hpp:43
int nbbits[256]
Definition: pol2ter.hpp:4
Definition: placemon3.hpp:14
void NewDestroyredspol(typPk &redspol, const typPk &Pk)
Definition: corealgo3.hpp:2235
void varmult(iterator iter1, iterator iter2, mon &var1, mon &var2, const Base &b)
Definition: corealgo3.hpp:1580
int mindeg(const typPk &l, monomial_server &serv)
Definition: corealgo3.hpp:1860
MSKCONST char MSKint32t MSKint32t * index
Definition: mosek.h:2860
dynamicexp< X, E >::degree_t Degree(const dynamicexp< X, E > &t)
Definition: dynamicexp.hpp:91
void findcorresppol(const mon &m, const typdump &dump, pol &res)
Definition: corealgo3.hpp:1547
void printmatfile_pequan(const typmat< Scl< MPF > > &m, FILE *fic)
Definition: io.hpp:381
iterator end()
Definition: types.hpp:30
int IsinB(const mon &m, const Base &b)
Definition: IsinB3.hpp:68
void conv_merge(typPk &Pk, typP &P, typexceed &ex, typsize &sizeex, const Base &b, monomial_server &serv)
Definition: corealgo3.hpp:1118
list< predicat > def
Definition: types.hpp:16
Mon mon
Definition: solver_bb_floating.cpp:136
int nbvars
Definition: types.hpp:17
int sizeplacemon()
Definition: placemon3.hpp:313
void increase_space(workspace< coeff > *w)
Definition: workspace.hpp:19
int taille2
Definition: types.hpp:7
exponent_t GetDegree() const
Definition: Monom.hpp:70
MSKrealt * c
Definition: mosek.h:2678
MSKint32t MSKint32t MSKint32t i
Definition: mosek.h:2278
void Crochetchoix(const typP &P, typPk &Pk, typPk &redspol, int k, Base &b)
int Iszero(const Scl< MPQ > &c)
Definition: Iszero.hpp:14
int sizenf
Definition: workspace.hpp:15
Monom< COEFF, dynamicexp<'x'> > Mon
Definition: solver_bb_floating.cpp:134
int GoodDir(const typmon &m, int i, const Base &b)
Definition: corealgo3.hpp:1099
int compute_ppcm(typppcm &ppcm, const Base &b)
Definition: corealgo3.hpp:44
int size
Definition: pol.hpp:10
int newPkMkMatrixof(typMat &mat, typPk &Pk, typP &P, typMk &Mk, int &k, Base &b, typdump &dump, typrecall &recall, workspace &w, monomial_server &serv)
Definition: corealgo3.hpp:1486
int goodspol(const mon &m1, const mon &m2, typppcm &ppcm, const Base &b, const typMk &Spoldejavu)
Definition: corealgo3.hpp:127
#define COEFF
Definition: symbo2.hpp:8
void forget(Base &b, typdump &dump, int k, typrecall &recall)
Definition: dump.hpp:75
mon * refuse
Definition: types.hpp:8
int mulind(int indexbase, int var, const typBase &b)
Definition: placemon3.hpp:126
void update_crochetchoix(typiterpk &iterPk, typiterpk &iter, int tmpind, workspace &w, typserv &serv)
Definition: corealgo3.hpp:1895
void AddB_dim(const typmat &mat, const typmat &L, typP &P, typPk &Pk, const typMk &Mk, const typdump &dump, typB &b)
Definition: IsinB3.hpp:545
int member(const typMk &tmpMk, const typename typMk::value_type mon)
Definition: corealgo3.hpp:1239
void initial_mon(const Base &b, typdump &dump, typserv &serv)
Definition: gotzman.hpp:57
iterator begin()
Definition: types.hpp:25
void algo(typP P, typdump &dump, Base &b, monomial_server &serv)
Definition: corealgo3.hpp:2264
list< predicat >::const_reverse_iterator const_reverse_iterator
Definition: types.hpp:23
predicat::monom_t mon
Definition: types.hpp:19
#define pol
Definition: pol2ter.hpp:3
void SetCoeff(const C &c)
Definition: Monom.hpp:68
void compress(typPk &Pk, typdump &dump, const Base &b, int k)
Definition: placemon3.hpp:1076
mon ind
Definition: pol.hpp:11
void my_merge(T &l1, const T &l2)
Definition: corealgo3.hpp:25
Multivariate monomials.
Definition: Monom.hpp:21
iterator erase(iterator first, iterator last)
Definition: types.hpp:35
typPk Spolordsup(const typPk &Pk, const Base &b, const typMk &Spoldejavu)
Definition: corealgo3.hpp:165
T * nf
Definition: pol.hpp:12
void init_algo(typP &P, int &nouveaumon, int &maxdeg, int &k, typPk &Pk, typMk &Mk, Base &b, typdump &dump, workspace &w, monomial_server &serv)
Definition: corealgo3.hpp:335
void DoBaseMk(const typP &tmpPk, typMk &Mk, Base &b, monomial_server &serv)
Definition: corealgo3.hpp:239
reverse_iterator rbegin()
Definition: types.hpp:27
MSKint32t MSKint32t char * name
Definition: mosek.h:2853
void NewCrochetchoix(typP &P, typPk &Pk, typMk &Mk, typPk &redspol, int &k, typdump &dump, Base &b, typrecall &recall, workspace &w, monomial_server &serv)
Definition: corealgo3.hpp:1939