1 #ifndef ALREADY_corealgo3
2 #define ALREADY_corealgo3
5 template<
typename typP,
typename typPk,
typename Base>
6 void Crochetchoix(
const typP & P,typPk & Pk, typPk & redspol,
int k,
9 template<
typename typPk>
12 typedef typename typPk::value_type
pol;
13 for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++)
16 for(
typename pol::iterator iterpol=iter->begin();iterpol!=iter->end();
19 if(!
Iszero(iterpol->GetCoeff()))
29 typename T::const_iterator iter=l2.begin();
30 for(;iter!=l2.end();iter++)
33 template<
typename mon>
38 for(
int i=0;
i<=maxi;
i++)
43 static int max_degppcm;
45 template<
typename typppcm,
typename Base>
52 list<mon> list1,list2,tmplist2;
59 for(
int i=0;
i<iter->taille2;
i++)
60 for(
int j=
i+1;
j<iter->taille2;
j++)
62 mon tmpmon=
lcm(iter->refuse[
i],iter->refuse[
j]);
64 if((!ppcm.count(tmpmon))&&
66 (iter->refuse[
i].GetDegree()+iter->refuse[
j].GetDegree())))
76 for(
int i=0;
i<iter->taille2;
i++)
77 for(
int j=
i+1;
j<iter->taille2;
j++)
79 mon tmpmon=
lcm(iter->refuse[
i],iter->refuse[
j]);
82 (iter->refuse[
i].GetDegree()+iter->refuse[
j].GetDegree())))
85 for(
int k=0;
k<iter->taille2;
k++)
90 mon lc_i=
lcm(iter->refuse[
k],iter->refuse[
i]);
91 mon lc_j=
lcm(iter->refuse[
k],iter->refuse[
j]);
100 list2.push_back(tmpmon);
108 for(
typename list<mon>::iterator iter2=list2.begin();
109 iter2!=list2.end();iter2++)
113 if(iter2->GetDegree()>maxdeg)
114 maxdeg=iter2->GetDegree();
124 if(k>max_degppcm) res=1;
128 template<
typename mon,
typename Base,
typename typppcm,
typename typMk>
130 ,
const typMk &Spoldejavu)
160 return (res==2)&&(comp==2)&&ppcm[m]&&!
member(Spoldejavu,m);
162 return (res==2)&&(comp==2)&&ppcm.count(m);
166 template<
typename typPk,
typename Base,
typename typMk>
169 typedef typename typPk::value_type::monom_t
mon;
177 for(
typename typPk::const_iterator iter1=Pk.begin();iter1!=Pk.end();iter1++)
178 for(
typename typPk::const_iterator iter2=iter1;iter2!=Pk.end();iter2++)
179 if (
goodspol(iter1->ind,iter2->ind,ppcm,b,Spoldejavu))
181 res.push_back(*iter1);
182 res.push_back(*iter2);
186 template<
typename typP>
189 int res=
Degree(P.front());
191 for(
typename typP::iterator iter=P.begin();iter!=P.end();iter++)
198 template<
typename typP>
202 for(
typename typP::const_iterator iter=P.begin();iter!=P.end();iter++)
204 if(
Degree(*iter)==
k) res.push_back(*iter);
209 template<
typename mon,
typename T,
typename monomial_server>
213 std::list<pol<mon,T> > res;
214 for(
typename std::list<
pol<mon,T> >::const_iterator iter=P.begin()
215 ;iter!=P.end();iter++)
217 if(
Degree(*iter,serv)==
k) res.push_back(*iter);
222 template<
typename typP,
typename Base>
226 for(
typename typP::const_iterator iter=tmpPk.begin();iter!=tmpPk.end();iter++)
227 for(
typename typP::value_type::const_iterator iterpol=iter->begin();
228 iterpol!=iter->end();iterpol++)
229 if(tmpvar<
lvar(iterpol->rep)) tmpvar=
lvar(iterpol->rep);
233 template<
typename typP,
typename typMk,
typename Base,
237 typedef typename typMk::value_type
mon;
242 for(
typename typP::const_iterator iter=tmpPk.begin();iter!=tmpPk.end();iter++)
244 mon tmp(choice(*iter,b,serv));
248 for(
typename typMk::iterator iter=Mk.begin();iter!=Mk.end();iter++)
249 if(*iter==tmp) {yes=0;
break;};
250 if(yes) Mk.push_back(tmp);
254 tmp.
refuse=(mon*)MAC_REV_MALLOC<mon>(tmp.
taille2*
sizeof(mon));
256 tmp.
accept=(mon*)MAC_REV_MALLOC<mon>(
sizeof(mon));
261 for(
typename typMk::iterator iter=Mk.begin();iter!=Mk.end();iter++,i++)
276 b.
def.push_back(tmp);
280 template <
typename typPk,
typename typMk,
typename typmat >
283 const typMk & lm,
const typmat &mat)
285 typedef typename typPk::value_type POL;
286 typedef typename typMk::value_type monom_t;
288 map<monom_t,int>
index;
290 if (res!=NULL) {
delete res;};
291 for(
typename typMk::const_iterator m = lm.begin(); m!=lm.end(); m++){
296 res=
new typmat(L.size(),lm.size());
299 for(
typename typPk::const_iterator pi = L.begin(); pi != L.end(); ++pi){
300 for(
typename POL::const_iterator m = pi->begin(); m!=pi->end(); m++)
303 if((index.count(*m)))
306 (*res)(l,c-1,m->GetCoeff());
314 template<
typename typMat,
typename typP,
typename typPk,
typename typMk,
typename Base,
typename typdump,
class monomial_server,
typename workspace>
315 void init_algo(typP &P,
int &nouveaumon,
int &maxdeg,
int &
k,
316 typPk &Pk, typMk & Mk,
Base & b, typdump & dump,
workspace &w,
319 typedef typename typPk::value_type
pol;
322 const typename typP::value_type::order_t (tmpord)(
const mon,
const mon);
340 Mk.erase(Mk.begin(),Mk.end());
345 tmpPk=
Solve(*Mat,tmpPk,&pr,&pc);
348 if(rank(*Mat)==(
int)tmpPk.size()) flag=0;
354 for(
typename typP::iterator iter=tmpPk.begin();iter!=tmpPk.end();iter++)
355 Pk.push_back(convert<pol>(*iter,b,serv));
360 template<
typename pol,
typename coeff,
typename workspace,
typename typserv>
367 int i=0,
j=0,
k=0,p=0,q=0;
368 int slicep[omp_get_max_threads()+1];
369 int sliceq[omp_get_max_threads()+1];
371 mcoeff_t *tmpnf,*tmpspace,zero=0;
372 unsigned char *tmpnfind;
373 cout<<
"toto "<<toto<<endl;
374 cout<<
"res "<<invconv<Poly>(res,serv)<<endl;
375 cout<<
"nf "<<invconv<Poly>(
nf,serv)<<endl;
376 if(res.sizenf<=nf.sizenf)
381 for(i=0;i<omp_get_max_threads()+1;i++)
386 #pragma omp parallel for shared(w,toto,slicep,sliceq)
387 for(i=0;i<res.sizenf;i++)
389 slicep[omp_get_thread_num()+1]+=
nbbits[res.nfind[
i]];
390 sliceq[omp_get_thread_num()+1]+=
nbbits[nf.nfind[
i]];
392 for(i=1;i<omp_get_thread_num()+1;i++)
394 slicep[
i]+=slicep[i-1];
395 sliceq[
i]+=sliceq[i-1];
397 #pragma omp parallel for shared(w,toto,slicep,sliceq) firstprivate(p,q)
398 for(i=0;i<res.sizenf;i++)
400 if(res.nfind[i]|nf.nfind[i])
402 w->
tabnf[
i]=res.nfind[
i]|nf.nfind[
i];
405 if ((res.nfind[i]>>
j)&1)
407 res.nf[p++ +slicep[omp_get_thread_num()]];
408 if((nf.nfind[i]>>
j)&1)
410 +sliceq[omp_get_thread_num()]];
421 q=sliceq[omp_get_max_threads()];
423 for(i=res.sizenf;i<nf.sizenf;i++)
427 if ((nf.nfind[i]>>
j)&1)
429 w->
tabcoeff[8*i+
j]=((mcoeff_t)-1)*toto*(nf.nf[q-1]);
434 for(
int i=0;i<nf.sizenf;i++)
436 res.nf=(
COEFF*)MAC_REV_REALLOC<COEFF>(res.nf,res.size*
sizeof(
COEFF)
437 ,tmpsize*
sizeof(
COEFF));
439 res.nfind=(
unsigned char*)realloc(res.nfind,nf.sizenf);
440 res.sizenf=nf.sizenf;
442 for(
int i=0;i<nf.sizenf;i++)
457 cout<<
"le resultat "<<invconv<Poly>(res,serv)<<endl;
463 for(i=0;i<omp_get_max_threads()+1;i++)
469 for(i=0;i<nf.sizenf;i++)
471 slicep[omp_get_thread_num()+1]+=
nbbits[res.nfind[
i]];
472 sliceq[omp_get_thread_num()+1]+=
nbbits[nf.nfind[
i]];
474 for(i=1;i<omp_get_thread_num()+1;i++)
476 slicep[
i]+=slicep[i-1];
477 sliceq[
i]+=sliceq[i-1];
480 for(i=0;i<nf.sizenf;i++)
485 unsigned char mask=1;
487 if(res.nfind[i]==255)
491 for(
int j=0;
j<8;
j++,mask<<=1)
494 if (res.nfind[i]&mask)
500 unsigned char mask=1;
503 for(
int j=0;
j<8;
j++,mask<<=1)
510 for(
int j=0;
j<8;
j++,mask<<=1)
521 if(res.nfind[i]|nf.nfind[i])
523 w->
tabnf[
i]=res.nfind[
i]|nf.nfind[
i];
526 if ((res.nfind[i]>>
j)&1)
530 if((nf.nfind[i]>>
j)&1)
539 for(i=nf.sizenf;i<res.sizenf;i++)
543 if ((res.nfind[i]>>
j)&1)
550 for(
int i=0;i<res.sizenf;i++)
552 res.nf=(
COEFF*)MAC_REV_REALLOC<COEFF>(res.nf,res.size*
sizeof(
COEFF)
553 ,tmpsize*
sizeof(
COEFF));
557 for(
int i=0;i<res.sizenf;i++)
576 cout<<
"k "<<
k<<
" tmpsize "<<tmpsize<<endl;
578 for(
int i=0;i<res.sizenf;i++)
581 if ((res.nfind[i]>>
j)&1)
582 if (
Iszero(res.nf[cpt++]))
583 cout<<
"j'ai fait n'importe quoi ici"<<endl;
584 cout<<
"les resultat "<<endl<<invconv<Poly>(res)<<endl;
588 template<
typename pol,
typename coeff>
594 int i=0,
j=0,
k=0,p=0,q=0;
596 mcoeff_t *tmpnf,*tmpspace;
597 unsigned char *tmpnfind;
599 cout<<
"dans myplus je calcul"<<endl<<invconv<Poly>(res,serv)<<endl<<
600 "toto "<<toto<<endl<<
"nf"<<endl<<invconv<Poly>(nf,serv)<<endl;
602 if(res.sizenf<nf.sizenf)
605 MAC_REV_MALLOC<mcoeff_t>(
sizeof(mcoeff_t)*nf.sizenf*8);
606 for(
int i=0;i<nf.sizenf*8;i++)
608 for(
int i=0;i<res.sizenf;i++)
609 tmpsize+=
nbbits[res.nfind[i]|nf.nfind[i]];
610 for(
int i=0;i<nf.sizenf;i++)
613 MAC_REV_MALLOC<mcoeff_t>(
sizeof(mcoeff_t)*tmpsize);
614 tmpnfind=(
unsigned char*)
615 MAC_REV_MALLOC<unsigned char>(nf.sizenf);
618 for(
int i=0;i<res.sizenf;i++)
620 if(res.nfind[i]|nf.nfind[i])
623 if ((res.nfind[i]>>
j)&1)
624 tmpspace[8*i+
j]=res.nf[p++];
625 if((nf.nfind[i]>>
j)&1)
626 tmpspace[8*i+
j]-=toto*nf.
nf[q++];
628 tmpnfind[
i]=res.nfind[
i]|nf.nfind[
i];
631 for(
int i=res.sizenf;i<nf.sizenf;i++)
635 if ((nf.nfind[i]>>
j)&1)
636 tmpspace[8*i+
j]=((mcoeff_t)-1)*toto*(nf.
nf[q++]);
637 tmpnfind[
i]=nf.nfind[
i];
639 for(
int i=0;i<nf.sizenf;i++)
642 if ((tmpnfind[i]>>
j)&1)
644 tmpnf[
k++]=tmpspace[8*i+
j];
646 tmpnfind[
i]&=~(1<<
j);
647 MAC_REV_FREE<mcoeff_t>(tmpspace,nf.sizenf*8*
sizeof(mcoeff_t));
648 res.sizenf=nf.sizenf;
653 MAC_REV_MALLOC<mcoeff_t>(
sizeof(mcoeff_t)*res.sizenf*8);
654 for(
int i=0;i<res.sizenf*8;i++)
656 for(
int i=0;i<nf.sizenf;i++)
657 tmpsize+=
nbbits[res.nfind[i]|nf.nfind[i]];
658 for(
int i=0;i<res.sizenf;i++)
661 MAC_REV_MALLOC<mcoeff_t>(
sizeof(mcoeff_t)*tmpsize);
662 tmpnfind=(
unsigned char*)
663 MAC_REV_MALLOC<unsigned char>(res.sizenf);
665 for(
int i=0;i<nf.sizenf;i++)
667 if(res.nfind[i]|nf.nfind[i])
670 if((res.nfind[i]>>
j)&1)
671 tmpspace[8*i+
j]=res.nf[p++];
672 if((nf.nfind[i]>>
j)&1)
673 tmpspace[8*i+
j]-=toto*nf.
nf[q++];
675 tmpnfind[
i]=res.nfind[
i]|nf.nfind[
i];
678 for(
int i=nf.sizenf;i<res.sizenf;i++)
682 if((res.nfind[i]>>
j)&1)
683 tmpspace[8*i+
j]=res.
nf[p++];
684 tmpnfind[i]=res.nfind[i];
687 for(
int i=0;i<res.sizenf;i++)
690 if ((tmpnfind[i]>>
j)&1)
692 tmpnf[
k++]=tmpspace[8*i+
j];
694 tmpnfind[
i]&=~(1<<
j);
696 MAC_REV_FREE<mcoeff_t>(tmpspace,res.sizenf*8*
sizeof(mcoeff_t));
699 cout<<
"k "<<
k<<
" tmpsize "<<tmpsize<<endl;
701 MAC_REV_FREE<mcoeff_t>(res.nf,res.size*
sizeof(mcoeff_t));
703 MAC_REV_FREE<unsigned char>(res.nfind,res.sizenf);
707 res.nf=(mcoeff_t*)MAC_REV_REALLOC<mcoeff_t>(res.nf,res.size*
sizeof(mcoeff_t)
708 ,
k*
sizeof(mcoeff_t));
716 for(
int i=0;i<res.sizenf;i++)
719 if ((tmpnfind[i]>>
j)&1)
720 if (
Iszero(res.nf[cpt++]))
721 cout<<
"j'ai fait n'importe quoi ici"<<endl;
722 cout<<
"les resultat "<<endl<<invconv<Poly>(res,serv)<<endl;
729 template<
typename mon,
typename Base>
749 template<
typename typpol,
typename typdump,
typename Base>
750 typpol
nf(
int var ,
int indmon,
const typdump &dump,
const Base & b)
754 typedef typename typdump::value_type
dumpstruct;
762 typename typdump::const_iterator iter;
767 for(iter=dump.begin();
768 (iter!=dump.end()) && (iter->k!=deg);iter++);
777 for(i=0;i<iter->size;i++)
780 if(iter->nf[i].ind.rep==tmpmon.
rep)
795 void getperm(
int *perm,
int sizeperm,
int *indextab)
797 int median=indextab[sizeperm/2],
i,
j=sizeperm-1;
800 if(indextab[i]>median)
803 indextab[
j]=indextab[
i];
807 perm[sizeperm/2]=sizeperm-
i;
808 getperm(perm,sizeperm-i-1,indextab);
809 getperm(perm+sizeperm-i,i,indextab+sizeperm-i);
813 template<
typename typpol,
typename typdump,
typename Base,
typename mon,
815 typpol
inline mult(
int i,
const typpol &
pol,
const typdump &dump,
819 typedef typename typpol::coeff_t coeff;
820 static const mon monzero=
mon(0);
823 (*exce)=(
mon*)MAC_REV_MALLOC<mon>((pol.size+1)*
sizeof(
mon));
824 int *stockindicetab=(
int*)
malloc(pol.size*
sizeof(
int));
825 int noquo=0,maxind=0,p=0,q=0;
829 for(
int j=0;
j<pol.sizenf;++
j)
833 if((pol.nfind[
j]>>
k)&1)
835 int stockindice2=mulind(8*
j+
k,i,b);
837 stockindice2=-1*(8*
j+
k)-1;
838 stockindicetab[p++]=stockindice2;
842 if (stockindice2>=maxind)
861 cout<<
" a '"<<q<<endl;
866 if(stockindicetab[
j]>=0)
872 cout<<
"le monome la "<<tmpmm<<
" "<<pol.nf[
j]<<endl;
876 w.
tabnf[stockindicetab[
j]/8]|=1<<(stockindicetab[
j]%8);
882 tmp=serv.nf(i,-1*(stockindicetab[
j]+1),dump,b);
904 unsigned *tmpptr=(
unsigned*)tmp.nfind;
906 for(k=0;k<tmp.sizenf/
sizeof(
unsigned);k++)
909 ((
unsigned*)w.
tabnf)[
k]|=tmpptr[
k];
911 for(l=0;l<8*
sizeof(unsigned);l++,mask<<=1)
915 -=pol.nf[
j]*tmp.nf[compteurtmp++];
920 for(k=tmp.sizenf-(tmp.sizenf%
sizeof(
unsigned))
926 for(l=0;l<8;l++,mask<<=1)
928 if(tmp.nfind[k]&mask)
929 w.
tabcoeff[8*k+l]-=pol.nf[
j]*tmp.nf[compteurtmp++];
936 for(
int k=0;k<tmp.sizenf;k++)
940 if(tmp.nfind[k]==255)
942 unsigned char mask=1;
944 for(
int l=0;l<8;l++,mask<<=1)
947 pol.nf[
j]*tmp.nf[compteurtmp++];
954 unsigned char mask=1;
956 for(
int l=0;l<8;l++,mask<<=1)
957 if(tmp.nfind[k]&mask)
960 pol.nf[
j]*tmp.nf[compteurtmp++];
973 (*exce)[noquo]=
mon(i,1);
974 int2mon(-1*(stockindicetab[
j]+1),tmpmon);
975 (*exce)[noquo]*=tmpmon;
976 (*exce)[noquo]*=pol.nf[
j];
982 (*exce)[noquo++]=ret.ind;
984 (*exce)=(
mon*)MAC_REV_REALLOC<mon>((*exce),(pol.size+1)*
sizeof(
mon)
985 ,(noquo)*
sizeof(
mon));
987 for(
int j=0;
j<exsize;
j++)
988 cout<<
" "<<(*exce)[
j];
991 ret.ind.SetCoeff(noquo+1);
1001 cout<<
" val p "<<p<<
" et pol.size "<<pol.size<<endl;
1003 ret.nf=(coeff*)MAC_REV_MALLOC<coeff>(ret.size*
sizeof(coeff));
1005 ret.nfind=(
unsigned char *)
malloc(ret.sizenf);
1007 for(
int j=0;
j<ret.sizenf;
j++)
1011 for(
int k=0;
k<8;
k++)
1021 ret.nfind[
j]&=~(1<<
k);
1026 ret.nf=(coeff*)MAC_REV_REALLOC<coeff>(ret.nf,ret.size*
sizeof(coeff),
1030 free(stockindicetab);
1032 cout<<
"ret.size "<<ret.size<<endl;
1033 cout<<invconv<Poly>(ret)<<endl;
1034 cout<<
"-----------------------------------"<<endl;
1036 for(
int i=0;i<ret.sizenf;i++)
1038 for(
int j=0;
j<8;
j++)
1039 if ((ret.nfind[i]>>
j)&1)
1040 if (
Iszero(ret.nf[cpt++]))
1041 cout<<
"nimpici"<<endl;
1047 template <
typename Mon,
typename Base>
1063 template<
typename typmon,
typename Base>
1070 #pragma omp parallel for shared(tmpm,res)
1071 for(j=0;j<b.
nbvar();j++)
1082 template<
typename typPk,
typename typP,
typename typexceed,
1087 typedef typename typP::value_type polalp;
1088 typedef typename polalp::order_t ord;
1089 typedef typename polalp::monom_t
mon;
1090 typedef typename typPk::value_type
pol;
1092 coeff * tabcoeff=NULL;
1093 unsigned char *tabindices=NULL;
1094 int tabsize=0,tabnfsize=0;
1096 for(
typename typP::iterator iter=P.begin();iter!=P.end();iter++)
1103 for(
typename polalp::iterator iterpol=iter->begin();
1104 iterpol!=iter->end();iterpol++)
1105 if (
IsinB(*iterpol,b) && (serv.
mon2int(*iterpol)>maxind))
1106 maxind=serv.
mon2int(*iterpol);
1107 tabcoeff=(coeff*)MAC_REV_MALLOC<coeff>((maxind+1)*
sizeof(coeff));
1108 tabindices=(
unsigned char*)
malloc(maxind/8+1);
1111 tabnfsize=maxind/8+1;
1112 memset((
void*)tabindices,0,tabnfsize);
1115 for(i=0;i<tabsize;i++)
1123 tmpex=(mon*)MAC_REV_REALLOC<mon>((
void*)tmpex,0,iter->size()
1126 for(
typename polalp::iterator iterpol=iter->begin();
1127 iterpol!=iter->end();iterpol++)
1130 cout<<
"IsinB("<<*iterpol<<
","<<
"b)"<<
IsinB(*iterpol,b)<<endl;
1132 if (
IsinB(*iterpol,b))
1135 cout<<
"dedans"<<endl;
1137 int tmp=serv.
mon2int(*iterpol);
1138 tabcoeff[tmp]=iterpol->GetCoeff();
1139 tabindices[tmp/8]|=1<<(tmp%8);
1146 cout<<
"y en a un qu'est pas dans B "<<*iterpol<<endl;
1148 if(!
Iszero(iterpol->GetCoeff()))
1149 tmpex[comp++]=*iterpol;
1152 tmpex=(mon*)MAC_REV_REALLOC<mon>((
void*)tmpex,iter->size()*
sizeof(
mon)
1153 ,(comp+1)*
sizeof(
mon));
1155 tmp.
nf=(coeff*)MAC_REV_MALLOC<coeff>(tmp.
size*
sizeof(coeff));
1156 tmp.nfind=tabindices;
1157 tmp.sizenf=tabnfsize;
1160 for(
int i=0;i<tabnfsize;i++)
1163 for(
int j=0;
j<8;
j++)
1164 if (((tabindices[i]>>
j)&1) && !
Iszero(tabcoeff[8*i+
j]))
1165 tmp.
nf[maxind++]=tabcoeff[8*i+
j];
1167 tmp.nfind[
i]&=~(1<<
j);
1169 tmp.
nf=(coeff*)MAC_REV_REALLOC<coeff>(tmp.
nf,tmp.
size*
sizeof(coeff)
1170 ,maxind*
sizeof(coeff));
1172 MAC_REV_FREE<coeff>(tabcoeff,tabsize*
sizeof(coeff));
1174 ex.push_back(tmpex);
1175 sizeex.push_back(comp);
1177 cout<<
"ici dans conv merge"<<endl;
1178 for(
int i=0;i<comp;i++)
1179 cout<<tmpex[i]<<
" ";
1185 template<
typename typMk>
1186 int member(
const typMk & tmpMk,
const typename typMk::value_type
mon)
1189 for(
typename typMk::const_iterator iter=tmpMk.begin();
1190 iter!=tmpMk.end();iter++)
1191 if(iter->rep==mon.rep) {res=1;
break;}
1195 template<
typename typMat,
typename typPk,
typename typP,
1196 typename typMk,
typename Base,
typename typdump,
typename typrecall,
1199 int &
k,
Base &b, typdump &dump,typrecall &recall
1202 typedef typename typMk::value_type
mon;
1203 typedef typename typP::value_type::order_t ord;
1204 typedef typename typPk::value_type
pol;
1206 typedef typename typP::value_type polyalp;
1207 typPk tmpPk,workvect;
1210 list<int> sizeexceed;
1211 int nbproj=0,flagdoplus=1,*ncol;
1213 cerr<<
"k on entering newpkmkmatrixof "<<k<<endl;
1215 typrecall verytmp=
Crochet(recall,k+1,serv);
1216 recall.erase(recall.begin(),recall.end());
1220 proj(ttmpP,dump,b,serv);
1222 nbproj=ttmpP.size();
1229 cout<<
"un des pol de pretendu degre le bon se reduit mal"<<endl;
1232 recover(tmpPk,Mk,dump,tmpdeg);
1233 cout<<
"forget "<<tmpdeg<<endl;
1235 forget(b,dump,tmpdeg,recall);
1236 serv.
compress(tmpPk,dump,b,tmpdeg);
1237 verytmp.erase(verytmp.begin(),verytmp.end());
1239 nbproj=ttmpP.size();
1240 Mk.erase(Mk.begin(),Mk.end());
1241 for (
typename typPk::iterator iterpk=tmpPk.begin();
1242 iterpk!=tmpPk.end();iterpk++)
1246 if (
IsinB(iterpk->ind,b))
1249 ;iterb!=b.
end();iterb++)
1251 iterb->refuse=(mon*)MAC_REV_REALLOC<mon>
1252 (iterb->refuse,(iterb->taille2)*
sizeof(
mon),
1253 (iterb->taille2+1)*
sizeof(
mon));
1254 iterb->refuse[iterb->taille2]=iterpk->ind;
1255 iterb->refuse[iterb->taille2].SetCoeff(1);
1260 for(
typename typPk::iterator iter=tmpPk.begin()
1261 ;iter!=tmpPk.end();iter++)
1263 mon *tmp=(mon*)MAC_REV_MALLOC<mon>(
sizeof(mon));
1265 tmpMk.push_back(*tmp);
1266 exceed.push_back(tmp);
1267 sizeexceed.push_back(1);
1292 for(i=0;i<b.
nbvar();i++)
1295 for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++)
1300 mon tmpmon=iter->ind*
mon(i,1);
1303 if(!
member(tmpMk,tmpmon))
1309 typename typrecall::iterator iterrec;
1314 pol stockmult=
mult(i,*iter,dump,b,&tmp,tmpsize,w
1322 cout<<
"apres mult "<<tmpsize<<endl;
1326 tmpMk.push_back(tmpmon);
1327 tmpPk.push_back(stockmult);
1328 exceed.push_back(tmp);
1329 sizeexceed.push_back(tmpsize);
1341 conv_merge(tmpPk,ttmpP,exceed,sizeexceed,b,serv);
1345 for(
typename typPk::iterator iter=tmpPk.begin();iter!=tmpPk.end();iter++)
1346 cout<<
"invocn"<<invconv<Poly>(*iter)<<endl;
1398 typename typPk::iterator tmpiter=tmpPk.begin();
1399 list<int>::iterator itersize=sizeexceed.begin();
1400 for(
typename list<mon*>::iterator iter=exceed.begin();iter!=exceed.end()
1401 ;tmpiter++,iter++,itersize++)
1403 cout<<
"pour un exceeed la taille attendue est "
1405 for(
int i=0;*itersize>
i;i++)
1407 cout<<
"le gus que je regarde "<<(*iter)[
i]<<endl;
1408 if(!
member(tmpMk,(*iter)[i]))
1410 cout<<(*iter)[
i]<<endl;
1411 cout<<
"dans ce pol "<<invconv<Poly>(*tmpiter)<<endl;
1412 cout<<
"l'ind "<<tmpiter->ind<<endl;
1419 mat.nrow=tmpPk.size();
1420 mat.ncol=tmpMk.size();
1421 ncol=(
int*)calloc(mat.ncol,
sizeof(
int));
1423 map<mon,int,ord> mapint;
1424 typename typMk::iterator itermk=tmpMk.begin();
1425 typename typPk::iterator iterpk=tmpPk.begin();
1426 typename list<mon*>::iterator iterex=exceed.begin();
1427 list<int>::iterator itersize=sizeexceed.begin();
1429 for(
int i=0;itermk!=tmpMk.end();
i++,itermk++)
1433 iterpk=tmpPk.begin();
1435 for(;iterpk!=tmpPk.end();iterpk++,iterex++,itersize++,line_num++)
1439 cout<<
"itesize "<<*itersize<<endl;
1452 for(
int i=0;*itersize>
i;i++)
1455 if (mapint.count((*iterex)[i]))
1458 cout<<
"iterex ici "<<(*iterex)[
i]<<endl;
1460 ++ncol[mapint[(*iterex)[
i]]];
1467 cout<<
"OUILLE OUILLE OUILLE "<<(*iterex)[
i]<<endl;
1470 mapint[(*iterex)[
i]]=mat.ncol-1;
1471 ncol=(
int*)realloc(ncol,mat.ncol*
sizeof(
int));
1472 ncol[mapint[(*iterex)[
i]]]=1;
1475 mon tmpmon=(*iterex)[
i];
1478 tmpMk.push_back(tmpmon);
1483 tmppol=convert<pol>(tmppolyalp,b);
1484 tmpPk.push_back(
mult(j,tmppol,dump,b,&tmp,tmpsize,w));
1485 exceed.push_back(tmp);
1486 sizeexceed.push_back(tmpsize);
1500 cout<<
"nnz of matrix "<<nnz<<endl;
1502 void * toto=MAC_REV_MALLOC<coeff>(nnz*
sizeof(
typename typMat::coeff_t));
1504 if (mat.nzval!=NULL) MAC_REV_FREE<typename typMat::coeff_t>
1506 *
sizeof(
typename typMat::coeff_t));
1516 if(mat.rowind!=NULL)
free(mat.rowind);
1517 mat.rowind=(
int*)
malloc(nnz*
sizeof(
int));
1519 if(mat.colptr!=NULL)
free(mat.colptr);
1520 mat.colptr=(
int*)
malloc((mat.ncol+1)*
sizeof(int));
1521 cout<<
"matrix of size "<<mat.nrow<<
"x"<<mat.ncol<<endl;
1523 typename typMat::coeff_t* nzval=(
typename typMat::coeff_t*)mat.nzval;
1524 int *rowind=mat.rowind;
1525 int *colptr=mat.colptr;
1528 for(
int i=0;
i<mat.ncol-1;
i++)
1530 colptr[
i+1]=colptr[
i]+ncol[
i];
1534 colptr[mat.ncol]=mat.nnz;
1542 itermk=tmpMk.begin();
1543 iterpk=tmpPk.begin();
1544 iterex=exceed.begin();
1545 itersize=sizeexceed.begin();
1548 for(;0&&(line_num < (int)(tmpPk.size()-nbproj));
1549 iterpk++,iterex++,itersize++,line_num++)
1553 mon tmpmon=iterpk->ind;
1556 const unsigned int tmpplus
1557 =mapint[tmpmon]+1,tmp=tmpplus-1;
1560 nzval[colptr[tmpplus]-ncol[tmp]]=1;
1566 rowind[colptr[tmpplus]-ncol[tmp]]=line_num;
1571 for(
int i=0;*itersize>
i;i++)
1573 const coeff stock=(*iterex)[
i].GetCoeff();
1574 (*iterex)[
i].SetCoeff(1);
1575 const unsigned int tmpplusex=mapint[(*iterex)[
i]]+1;
1576 const unsigned int tmpex=mapint[(*iterex)[
i]];
1577 nzval[colptr[tmpplusex]-ncol[tmpex]]
1579 rowind[colptr[tmpplusex]-ncol[tmpex]]=line_num;
1584 MAC_REV_FREE<mon>(*iterex,*itersize*
sizeof(
mon));
1586 for(;(iterpk!=tmpPk.end());iterpk++,iterex++,itersize++,line_num++)
1591 for(
int i=0;*itersize>
i;i++)
1593 const coeff stock=(*iterex)[
i].GetCoeff();
1594 (*iterex)[
i].SetCoeff(1);
1595 const unsigned int tmpplusex=mapint[(*iterex)[
i]]+1;
1596 const unsigned int tmpex=mapint[(*iterex)[
i]];
1597 nzval[colptr[tmpplusex]-ncol[tmpex]]
1599 rowind[colptr[tmpplusex]-ncol[tmpex]]=line_num;
1603 MAC_REV_FREE<mon>(*iterex,*itersize*
sizeof(
mon));
1608 for(
typename typPk::iterator iterpk=tmpPk.begin()
1609 ;iterpk!=tmpPk.end();iterpk++)
1610 iterpk->ind.SetCoeff(1);
1633 template<
typename typdump,
typename mon,
typename pol>
1637 typename typdump::const_iterator iter=dump.begin();
1638 for(;(iter!=dump.end())&&(iter->k!=d);iter++);
1640 if(iter!=dump.end())
1642 for(i=0;(i<iter->size)&&(iter->nf[i].ind.rep!=m.
rep);i++);
1666 template<
typename iterator,
typename mon,
typename Base>
1671 if(iter1->ind.GetDegree(
i)>iter2->ind.GetDegree(
i))
1673 if(iter2->ind.GetDegree(
i)>iter1->ind.GetDegree(
i))
1678 template <
typename mon,
typename pol,
typename typdump,
typename Base,
1680 pol
halfred(
const mon &targetind,
const pol & p,
const typdump & dump
1684 static const mon monzero=
mon(0);
1686 int *place=(
int*)MAC_REV_MALLOC<int>(p.
size*
sizeof(
int)),comp=0;
1693 int i,maxref=0,ppp=0,nbbitsun=0;
1695 for(i=0;i<b.
nbvar();i++)
1714 for(i=0;i<p.sizenf;i++)
1719 cout<<nbbitsun<<
" p.nfind[i] "<<(int)p.nfind[i]<<endl;
1721 nbbitsun+=
nbbits[p.nfind[i]];
1722 for(
int j=0;
j<8;
j++)
1724 if((p.nfind[i]>>
j)&1)
1728 place[comp]=serv.
mulind(8*i+
j,varref,b);
1730 place[comp]=-1*(8*i+
j+1);
1731 if (place[comp]>maxref)
1747 place[comp]=indtmpmon;
1751 place[comp]=-1*(8*i+
j);
1759 tmpspace=(coeff*)MAC_REV_MALLOC<coeff>((maxref/8+1)*8*
sizeof(coeff));
1761 cout<<
"comp "<<comp<<
" et p.size "<<p.
size<<endl;
1763 res.sizenf=(maxref/8+1);
1764 for(
int j=0;
j<8*res.sizenf;
j++)
1766 res.nfind=(
unsigned char*)MAC_REV_MALLOC<unsigned char>(res.sizenf);
1767 memset(res.nfind,0,res.sizenf);
1768 for(
int j=0;
j<nbbitsun;
j++)
1774 cout<<
"le monome la "<<tmpmm<<
" "<<p.
nf[
j]<<endl;
1776 tmpspace[place[
j]]+=p.
nf[
j];
1777 res.nfind[place[
j]/8]|=1<<(place[
j]%8);
1783 tmp=serv.nf(varref,-1*place[
j]-1,dump,b);
1788 tmp=nf<typpol>(tmpmon,dump,b);
1796 if(tmp.sizenf>res.sizenf)
1798 res.nfind=(
unsigned char*)realloc(res.nfind,tmp.sizenf);
1799 for(
int k=res.sizenf;
k<tmp.sizenf;
k++)
1801 tmpspace=(coeff*)MAC_REV_REALLOC<coeff>(tmpspace,
1802 res.sizenf*8*
sizeof(coeff),
1803 tmp.sizenf*8*
sizeof(coeff));
1804 for(
int k=res.sizenf*8;
k<tmp.sizenf*8;
k++)
1806 res.sizenf=tmp.sizenf;
1809 for(
int k=0;
k<tmp.sizenf;
k++)
1813 for(
int l=0;l<8;l++)
1814 if((tmp.nfind[
k]>>l)&1)
1815 tmpspace[8*
k+l]-=p.
nf[j]*tmp.
nf[compteurtmp++];
1817 res.nfind[
k]|=tmp.nfind[
k];
1823 serv.
int2mon(-1*place[j]-1,tmpmon);
1824 tmpmon*=
mon(varref,1);
1826 cout<<i<<
" "<<serv.
int2mon_[i]<<endl;
1827 cout<<
"monom "<<tmpmon<<
" "<<-1*place[j]
1828 <<
" "<<p.
nf[j]<<endl;
1829 cerr<<
"Je n'aurrai pas du passer par la "<<endl;
1835 for(
int j=0;
j<res.sizenf;
j++)
1838 res.
nf=(coeff*)MAC_REV_MALLOC<coeff>(comp*
sizeof(coeff));
1841 for(
int j=0;
j<res.sizenf;
j++)
1843 for(
int k=0;
k<8;
k++)
1844 if((res.nfind[
j]>>
k)&1)
1845 if(tmpspace[8*
j+
k]!=0)
1846 {res.
nf[comp++]=tmpspace[8*
j+
k];}
1848 res.nfind[
j]&=~(1<<
k);
1849 res.
nf=(coeff*)MAC_REV_REALLOC<coeff>(res.
nf,res.
size*
sizeof(coeff)
1850 ,comp*
sizeof(coeff));
1852 MAC_REV_FREE<coeff>(tmpspace,res.sizenf*8*
sizeof(coeff));
1858 template <
typename typPk,
typename typdump,
typename Base,
1860 void ReduceSpol(typPk &S,
const typdump & dump,typPk &redspol,
const Base &b
1864 typedef typename typPk::value_type
pol;
1868 list<typPk> membermon;
1869 cout<<
"en entree de RedSpol S.size "<<S.size()/2<<endl;
1871 for(
typename typPk::iterator iterS=S.begin();iterS!=S.end();iterS++,iterS++)
1873 typename typPk::iterator iterS2=iterS;
1874 typename list<mon>::iterator itermon=leadmon.begin();
1875 typename list<typPk>::iterator itermemb=membermon.begin();
1876 mon var1,var2,tmpleadmon;
1878 varmult(iterS,iterS2,var1,var2,b);
1879 tmpleadmon=iterS->ind*var1;
1881 for(;itermon!=leadmon.end()&&itermon->rep!=tmpleadmon.
rep;
1882 itermon++,itermemb++);
1883 if(itermon!=leadmon.end())
1886 for(
typename typPk::iterator tmpiter=itermemb->begin();
1887 tmpiter!=itermemb->end();tmpiter++)
1889 if(tmpiter->ind.rep==iterS->ind.rep) yes1=0;
1890 if(tmpiter->ind.rep==iterS2->ind.rep) yes2=0;
1892 if(yes1) itermemb->push_back(*iterS);
1893 if(yes2) itermemb->push_back(*iterS2);
1898 leadmon.push_back(tmpleadmon);
1900 membermon.push_back(verytmp);
1901 membermon.back().push_back(*iterS);
1902 membermon.back().push_back(*iterS2);
1908 typename list<mon>::iterator itermon=leadmon.begin();
1909 typename list<typPk>::iterator itermemb=membermon.begin();
1910 for(;itermon!=leadmon.end();itermon++,itermemb++)
1912 typename typPk::value_type ref;
1913 typename typPk::iterator tmpiter=itermemb->begin();
1914 ref=
halfred(*itermon,*tmpiter,dump,b,serv);
1918 for(;tmpiter!=itermemb->end();tmpiter++)
1920 typename typPk::value_type redcur;
1921 redcur=
halfred(*itermon,*tmpiter,dump,b,serv);
1922 my_plus(redcur,ref,(coeff)1,&w,serv);
1925 redspol.push_back(redcur);
1931 MAC_REV_FREE<coeff>(redcur.nf,redcur.size*
sizeof(coeff));
1932 MAC_REV_FREE<unsigned char>(redcur.nfind,redcur.sizenf);
1935 MAC_REV_FREE<coeff>(ref.nf,ref.size*
sizeof(coeff));
1936 MAC_REV_FREE<unsigned char>(ref.nfind,ref.sizenf);
1941 template<
typename typPk,
typename monomial_server>
1944 typedef typename typPk::value_type::monom_t
mon;
1948 for(
typename typPk::const_iterator iter=l.begin() ;iter!=l.end();iter++)
1952 for(
int i=0;
i<iter->sizenf;
i++)
1954 for(
int j=0;
j<8;
j++)
1955 if((iter->nfind[
i]>>
j)&1)
1962 if (iter->ind.GetCoeff()==(coeff)1)
1963 mmax=(mmax<iter->ind.GetDegree())?iter->ind.GetDegree():mmax;
1967 if(res==-1) res=mmax;
1968 res=(mmax>res)?res:mmax;
1975 template<
typename coeff,
typename typiterpk,
typename workspace,
typename typserv>
1980 if((iterPk->sizenf>tmpind/8)&&(((iterPk->nfind[tmpind/8])>>(tmpind%8))&1))
1986 for(
int j=0;8*
j<=tmpind;
j++)
1988 for(
int j=7;
j>=(tmpind % 8);
j--)
1989 if((iterPk->nfind[tmpind/8]>>
j)&1)
1993 cout<<
"i ici "<<i<<
" et iterPk->size "<<iterPk->size<<endl;
2000 for(
int j=i;
j<iterPk->size-1;
j++){
2001 iterPk->nf[
j]=iterPk->nf[
j+1];
2003 iterPk->nfind[tmpind/8]&=~(1<< (tmpind%8));
2004 iterPk->nf=(coeff*)MAC_REV_REALLOC<coeff>(iterPk->nf,
2005 iterPk->size*
sizeof(coeff),(iterPk->size-1)*
sizeof(coeff));
2008 my_plus(*iterPk,*iter,tmp,&w,serv);
2015 template<
typename typP,
typename typPk,
typename typMk
2016 ,
typename Base,
typename typdump,
typename typrecall,
2019 ,
int &
k,typdump &dump, Base &b, typrecall & recall
2026 typedef typename typP::value_type polyalp;
2027 typedef typename polyalp::monom_t
mon;
2028 typedef typename polyalp::coeff_t coeff;
2047 typPk res=
Crochet(redspol,k,serv),tmpres;
2050 for(
typename typPk::iterator iter=res.begin();iter!=res.end();iter++)
2052 for(
typename typPk::iterator iterredspol=redspol.begin();
2053 iterredspol!=redspol.end();iterredspol++)
2054 if(iter->nf==iterredspol->nf)
2056 redspol.erase(iterredspol);
2061 redspol.erase(redspol.begin(),redspol.end());
2064 for(
typename typPk::iterator iter=res.begin();iter!=res.end();iter++)
2070 iter->ind=choice(*iter,b,serv);
2075 if(iter->ind.GetDegree()<
k)
2078 k=iter->ind.GetDegree();
2083 tmpres.erase(tmpres.begin(),tmpres.end());
2084 res.erase(res.begin(),res.end());
2087 for(
typename typPk::iterator iterres=res.begin()
2088 ;iterres!=res.end();iterres++)
2090 for(
typename typPk::iterator iterredspol=redspol.begin();
2091 iterredspol!=redspol.end();iterredspol++)
2092 if(iterres->nf==iterredspol->nf)
2094 redspol.erase(iterredspol);
2098 for(
typename typPk::iterator iterredspol=redspol.begin();
2099 iterredspol!=redspol.end();iterredspol++)
2100 if(
Degree(*iterredspol,serv)<=
k)
2102 tmpres.push_back(*iterredspol);
2103 redspol.erase(iterredspol--);
2106 redspol.erase(redspol.begin(),redspol.end());
2108 tmpres.erase(tmpres.begin(),tmpres.end());
2110 iter->ind=choice(*iter,b,serv);
2120 serv.
compress(Pk,redspol,dump,b,k);
2144 *iter/=iter->ind.GetCoeff();
2146 iter->ind*=(coeff)1/iter->ind.GetCoeff();
2147 tmpind=serv.
mon2int(iter->ind);
2149 for(
int j=0;8*
j<=tmpind;
j++)
2151 for(
int j=7;
j>=(tmpind % 8);
j--)
2152 if((iter->nfind[tmpind/8]>>
j)&1)
2154 for(
int j=i;
j<iter->size-1;
j++)
2155 iter->nf[
j]=iter->nf[
j+1];
2156 iter->nf=(coeff*)MAC_REV_REALLOC<coeff>(iter->nf,
2157 iter->size*
sizeof(coeff),
2158 (iter->size-1)*
sizeof(coeff));
2159 iter->nfind[tmpind/8]&=~(1<<(tmpind%8));
2162 cout<<
"apres tambouille"<<endl<<invconv<Poly>(*iter)<<endl;
2177 tmpres.push_back(*iter);
2182 for(
typename typPk::iterator iterPk=Pk.begin();iterPk!=Pk.end();iterPk++)
2183 update_crochetchoix<coeff>(iterPk,iter,tmpind,w,serv);
2184 typename typPk::iterator iterredspol=iter;
2186 for(;iterredspol!=res.end();iterredspol++)
2190 update_crochetchoix<coeff>(iterredspol,iter,tmpind,w,serv);
2193 typename typPk::iterator iterend=tmpres.end();
2195 for(iterredspol=tmpres.begin();iterredspol!=iterend;iterredspol++)
2199 update_crochetchoix<coeff>(iterredspol,iter,tmpind,w,serv);
2207 mon *tmp=(mon*)MAC_REV_MALLOC<mon>(iterb->taille1*
sizeof(mon));
2208 for(
int i=0;i<iterb->taille1;i++)
2210 tmp[tmptaille1++]=iterb->accept[i];
2211 tmp=(mon*)MAC_REV_REALLOC<mon>(tmp,iterb->taille1*
sizeof(
mon)
2212 ,tmptaille1*
sizeof(mon));
2213 MAC_REV_FREE<mon>(iterb->accept,iterb->taille1*
sizeof(
mon));
2215 iterb->taille1=tmptaille1;
2216 if(iterb->taille1==0)
2218 MAC_REV_FREE<mon>(iterb->refuse,iterb->taille2*
sizeof(
mon));
2222 iterb->refuse=(mon*)MAC_REV_REALLOC<mon>
2223 (iterb->refuse,(iterb->taille2)*
sizeof(
mon),
2224 (iterb->taille2+1)*
sizeof(
mon));
2225 iterb->refuse[iterb->taille2]=iter->ind;
2227 iterb->refuse[iterb->taille2].SetCoeff(1);
2234 for (
typename typPk::iterator iterpk=Pk.begin();iterpk!=Pk.end();iterpk++)
2238 if (
IsinB(iterpk->ind,b))
2242 iterb->refuse=(mon*)MAC_REV_REALLOC<mon>
2243 (iterb->refuse,(iterb->taille2)*
sizeof(
mon),
2244 (iterb->taille2+1)*
sizeof(
mon));
2245 iterb->refuse[iterb->taille2]=iterpk->ind;
2246 iterb->refuse[iterb->taille2].SetCoeff(1);
2251 #ifdef NO_TWICE_FALL
2252 for(
typename typPk::iterator iter=tmpres.begin();iter!=tmpres.end();iter++)
2253 P.push_back(invconv<polyalp>(*iter));
2256 for(
typename typPk::iterator iter=tmpres.begin();iter!=tmpres.end();iter++)
2257 P.push_back(invconv<polyalp>(*iter));
2258 cout<<
"a la fin de §New"<<endl;
2261 for(
typename typPk::iterator iter=tmpres.begin();iter!=tmpres.end();iter++)
2262 cout<<
"tmpres"<<endl<<invconv<polyalp>(*iter)<<endl;
2263 cout<<
"tmpres.size "<<tmpres.size()<<endl;
2286 template<
typename typPk>
2290 for(
typename typPk::iterator iter=redspol.begin();
2291 iter!=redspol.end();iter++)
2294 MAC_REV_FREE<typename typPk::value_type::coeff_t>(iter->nf,iter->size*
sizeof(
typename typPk::value_type::coeff_t));
2295 MAC_REV_FREE<unsigned char>(iter->nfind,iter->sizenf);
2299 template<
typename typMk>
2302 Spoldejavu.erase(Spoldejavu.begin(),Spoldejavu.end());
2303 for(
typename typMk::const_iterator iter1=Mk.begin();iter1!=Mk.end();
2305 for(
typename typMk::const_iterator iter2=iter1;iter2!=Mk.end();
2308 typename typMk::value_type tmp=
lcm(*iter1,*iter2);
2309 if (tmp.GetDegree()==iter1->GetDegree()+1)
2310 Spoldejavu.push_back(tmp);
2314 template<
typename typP,
typename typPk,
typename typdump,
typename Base
2323 typedef typename typP::value_type polyalp;
2324 typedef list<typename typPk::value_type::monom_t> typMk;
2325 typedef typename typMk::value_type
mon;
2326 typedef typename typPk::value_type
pol;
2335 typedef tmptypmat<typename typP::value_type::coeff_t> typMat;
2337 int nouveaumon,allpolused=0,maxdeg,
k,*pr,*pc;
2340 init_algo<typMat>(P,nouveaumon,maxdeg,
k,Pk,Mk,b,dump,w,serv);
2345 while(nouveaumon||(k<=maxdeg))
2347 while(!
GB_stop(k)||(k<=maxdeg))
2358 for(
int i=0;
i<p->taille1;
i++)
2360 cout<<
"p.accept[i] "<<p->accept[
i]<<endl;
2362 for(
int i=0;
i<p->taille2;
i++)
2364 cout<<
"p.refuse[i] "<<p->refuse[
i]<<endl;
2373 cout<<
"poly a la fin de la boulcle de l'algo "<<Pk.size()<<endl;
2374 for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++)
2378 cout<<invconv<typename typP::value_type>(*iter)<<endl;
2379 for(
int i=0;
i<iter->sizenf;
i++)
2380 for(
int j=0;
j<8;
j++)
2381 if (((iter->nfind[
i]>>
j)&1) && (iter->nf[cpt++]==0))
2383 cout<<
"ici ca couille a la place"<<8*
i+
j<<endl;
2384 cout<<iter->sizenf<<
" "<<iter->size<<endl;
2400 sprintf(name,
"mat%d",toto);
2401 fic=fopen(name,
"w");
2408 if(killspol) S.erase(S.begin(),S.end());
2409 if (k+1>=maxdeg) allpolused=1;
2410 if(Mk.size()==0) nouveaumon=0;
2429 Solve(Mat,L,Pk,&pr,&pc,w);
2430 cout<<
"fin du solve"<<endl;
2439 typename typMk::iterator itermon=Mk.begin();
2440 typename typPk::iterator iter;
2441 for(iter=Pk.begin();
2442 itermon!=Mk.end();iter++,itermon++,j++)
2447 iter->ind=*itermon*(iter->ind.GetCoeff());
2474 if ((
unsigned)rank(Mat)==Mk.size())
2477 typMk tmpSpoldejavu;
2478 typPk redspol,secd=secondmembre(Mat,Pk);;
2481 cout<<
"matrice de rang plein "<<endl;
2491 if(redspol.size()==0)
2495 my_merge(Spoldejavu,tmpSpoldejavu);
2505 int tmpdeg=
mindeg(redspol,serv);
2508 cout<<
"redspol.size() "<<redspol.size()<<endl;
2511 my_merge(Spoldejavu,tmpSpoldejavu);
2522 cout<<
"Pk.size() avant Crochetchoix "<<Pk.size()<<endl;
2528 cout<<
"Pk.size apres Crochetchoix "<<Pk.size()<<
" et k "<<k<<endl;
2541 cout<<
"matrice de rang pas plein "<<endl;
2546 AddB(Mat,Pk,Mk,dump,b,serv);
2551 secd=secondmembre(Mat,Pk);
2568 for(
typename typPk::iterator iter=redspol.begin();iter!=redspol.end();iter++)
2569 P.push_back(invconv<polyalp>(*iter));
2571 if(redspol.size()==0)
2593 cout<<
"il ya un passage par mat rang pas"
2594 <<
"plein et pol non zero"<<endl;
2629 for(
typename typPk::iterator iter=redspol.begin();iter!=redspol.end();iter++)
2630 P.push_back(invconv<polyalp>(*iter));
2656 cout<<
"Apres NewCrochetchoix"<<endl;
2660 for(
int i=0;
i<p->taille1;
i++)
2662 cout<<
"p.accept[i] "<<p->accept[
i]<<endl;
2664 for(
int i=0;
i<p->taille2;
i++)
2666 cout<<
"p.refuse[i] "<<p->refuse[
i]<<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;
2701 cout<<
"sortie d'algo flash et dimension "<<endl;
2709 #endif //ALREADY_corealgo3
void int2mon(const int &i, mon &res)
Definition: placemon3.hpp:664
int GoodDir(const typmon &m, int i, const Base &b)
Definition: corealgo3_omp.hpp:1064
Definition: workspace.hpp:11
void remiseenforme(typpol &p)
Definition: ugly.hpp:2
Multivariate polynomials.
Definition: MPoly.hpp:28
void ReduceSpol(typPk &S, const typdump &dump, typPk &redspol, const Base &b, workspace &w, monomial_server &serv)
Definition: corealgo3_omp.hpp:1860
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 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 setorder(ptrfun tmpord)
Definition: placemon3.hpp:301
mon * int2mon_
Definition: placemon3.hpp:21
void varmult(iterator iter1, iterator iter2, mon &var1, mon &var2, const Base &b)
Definition: corealgo3_omp.hpp:1667
void algo(typP P, typdump &dump, Base &b, monomial_server &serv)
Definition: corealgo3_omp.hpp:2316
list< predicat >::iterator iterator
Definition: types.hpp:20
void init_multiple(int n)
Definition: placemon3.hpp:59
int Ispolzero(const pol &p)
Definition: Iszero.hpp:30
int minmaxdegP(typP P, int &maxdeg)
Definition: corealgo3_omp.hpp:187
mon * accept
Definition: types.hpp:6
int my_ord(const mon &m1, const mon &m2)
Definition: ord.hpp:2
int indice2(int i, int j, const Base &b)
Definition: corealgo3_omp.hpp:730
long flag
Definition: alp_f2c.H:52
void inverse(int *&, int)
list< predicat >::const_iterator const_iterator
Definition: types.hpp:21
void update_crochetchoix(typiterpk &iterPk, typiterpk &iter, int tmpind, workspace &w, typserv &serv)
Definition: corealgo3_omp.hpp:1976
void recover(typPk &Pk, typMk &Mk, const typdump &dump, int k)
Definition: dump.hpp:192
int member(const typMk &tmpMk, const typename typMk::value_type mon)
Definition: corealgo3_omp.hpp:1186
Mon my_divmon(const Mon &mon, int i, const Base &b)
Definition: corealgo3_omp.hpp:1048
coeff * tabcoeff
Definition: workspace.hpp:12
void Dump(const typPk &Pk, typdump &dump)
Definition: dump.hpp:48
T coeff_t
Definition: pol.hpp:9
typmat * MatrixOf(const typPk &L, const typMk &lm, const typmat &mat)
Definition: corealgo3_omp.hpp:282
typpol nf(int var, int indmon, const typdump &dump, const Base &b)
Definition: corealgo3_omp.hpp:750
int taille1
Definition: types.hpp:5
void selectnozero(typP &ttmp)
Definition: Iszero.hpp:40
void stab(typPk &Pk)
Definition: corealgo3_omp.hpp:10
void NewDestroyredspol(typPk &redspol, const typPk &Pk)
Definition: corealgo3_omp.hpp:2287
int nbvar()
Definition: types.hpp:37
int mon2int(const mon &mm)
Definition: placemon.hpp:294
void reinit_multiple()
Definition: placemon3.hpp:85
MSKconetypee MSKrealt MSKint32t MSKint32t j
Definition: mosek.h:2421
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_omp.hpp:315
void Crochetchoix(const typP &P, typPk &Pk, typPk &redspol, int k, Base &b)
unsigned char * tabnf
Definition: workspace.hpp:13
typPk Spolordsup(const typPk &Pk, const Base &b, const typMk &Spoldejavu)
Definition: corealgo3_omp.hpp:167
void destroy_space(workspace< coeff > *w)
Definition: workspace.hpp:34
void int2mon(const int &i, mon &res)
Definition: placemon.hpp:288
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
void getperm(int *perm, int sizeperm, int *indextab)
Definition: corealgo3_omp.hpp:795
C coeff_t
Definition: Monom.hpp:26
void init_space(workspace< coeff > *w)
Definition: workspace.hpp:43
int nbbits[256]
Definition: pol2ter.hpp:4
mon lcm(const mon &m1, const mon &m2)
Definition: corealgo3_omp.hpp:34
int goodspol(const mon &m1, const mon &m2, typppcm &ppcm, const Base &b, const typMk &Spoldejavu)
Definition: corealgo3_omp.hpp:129
Definition: placemon3.hpp:14
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_omp.hpp:2018
MSKCONST char MSKint32t MSKint32t * index
Definition: mosek.h:2860
int compute_ppcm(typppcm &ppcm, const Base &b)
Definition: corealgo3_omp.hpp:46
dynamicexp< X, E >::degree_t Degree(const dynamicexp< X, E > &t)
Definition: dynamicexp.hpp:91
void printmatfile_pequan(const typmat< Scl< MPF > > &m, FILE *fic)
Definition: io.hpp:381
iterator end()
Definition: types.hpp:30
void my_merge(T &l1, const T &l2)
Definition: corealgo3_omp.hpp:27
int IsinB(const mon &m, const Base &b)
Definition: IsinB3.hpp:68
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
void DoBaseMk(const typP &tmpPk, typMk &Mk, Base &b, monomial_server &serv)
Definition: corealgo3_omp.hpp:235
MSKrealt * c
Definition: mosek.h:2678
void conv_merge(typPk &Pk, typP &P, typexceed &ex, typsize &sizeex, const Base &b, monomial_server &serv)
Definition: corealgo3_omp.hpp:1084
MSKint32t MSKint32t MSKint32t i
Definition: mosek.h:2278
int Iszero(const Scl< MPQ > &c)
Definition: Iszero.hpp:14
typP Crochet(const typP &P, int k)
Definition: corealgo3_omp.hpp:199
MPoly< vector< Mon >, my_Dlex< Mon > > Poly
Definition: solver_bb_floating.cpp:138
int sizenf
Definition: workspace.hpp:15
typpol mult(int i, const typpol &pol, const typdump &dump, const Base &b, mon **exce, int &exsize, workspace &w, monomial_server &serv)
Definition: corealgo3_omp.hpp:815
int mindeg(const typPk &l, monomial_server &serv)
Definition: corealgo3_omp.hpp:1942
Monom< COEFF, dynamicexp<'x'> > Mon
Definition: solver_bb_floating.cpp:134
void my_plus(pol &res, const pol &nf, const coeff toto, workspace *w, typserv &serv)
Definition: corealgo3_omp.hpp:361
void Setnbvars(const typP &tmpPk, Base &b)
Definition: corealgo3_omp.hpp:223
int size
Definition: pol.hpp:10
#define COEFF
Definition: symbo2.hpp:8
void Listedejafait(const typMk &Mk, typMk &Spoldejavu)
Definition: corealgo3_omp.hpp:2300
void forget(Base &b, typdump &dump, int k, typrecall &recall)
Definition: dump.hpp:75
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_omp.hpp:1198
mon * refuse
Definition: types.hpp:8
int mulind(int indexbase, int var, const typBase &b)
Definition: placemon3.hpp:126
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
iterator begin()
Definition: types.hpp:25
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
Multivariate monomials.
Definition: Monom.hpp:21
void findcorresppol(const mon &m, const typdump &dump, pol &res)
Definition: corealgo3_omp.hpp:1634
iterator erase(iterator first, iterator last)
Definition: types.hpp:35
T * nf
Definition: pol.hpp:12
int GB_stop(int k)
Definition: corealgo3_omp.hpp:121
reverse_iterator rbegin()
Definition: types.hpp:27
pol halfred(const mon &targetind, const pol &p, const typdump &dump, const Base &b, monomial_server &serv)
Definition: corealgo3_omp.hpp:1680
MSKint32t MSKint32t char * name
Definition: mosek.h:2853