1 template<
typename typP,
typename typPk,
typename Base>
2 void Crochetchoix(
const typP & P,typPk & Pk, typPk & redspol,
int k,
5 template<
template<
typename>
class cont,
typename mon,
typename T>
9 for(
typename cont<
pol<mon,T> >::const_iterator iter=P.begin()
10 ;iter!=P.end();iter++)
12 if(
Degree(*iter)==
k) res.push_back(*iter);
17 template<
typename typPk>
20 typedef typename typPk::value_type
pol;
21 for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++)
24 for(
typename pol::iterator iterpol=iter->begin();iterpol!=iter->end();
27 if(!
Iszero(iterpol->GetCoeff()))
37 typename T::const_iterator iter=l2.begin();
38 for(;iter!=l2.end();iter++)
42 template<
typename mon>
47 for(
int i=0;
i<=maxi;
i++)
52 template<
typename typppcm,
typename Base>
58 list<mon> list1,list2;
62 for(
int i=0;
i<iter->taille2;
i++)
63 for(
int j=
i+1;
j<iter->taille2;
j++)
65 mon tmpmon=
lcm(iter->refuse[
i],iter->refuse[
j]);
67 if((!ppcm.count(tmpmon))&&
69 (iter->refuse[
i].GetDegree()+iter->refuse[
j].GetDegree())))
74 (iter->refuse[
i].GetDegree()+iter->refuse[
j].GetDegree())))
75 list1.push_back(tmpmon);
80 for(
typename list<mon>::iterator iter1=list1.begin();
81 iter1!=list1.end();iter1++)
82 list2.push_back(*iter1);
83 for(
typename list<mon>::iterator iter1=list1.begin();
84 iter1!=list1.end();iter1++)
86 for(
typename list<mon>::iterator iter2=list2.begin();
87 iter2!=list2.end();iter2++)
93 cout<<
"liste2.size "<<list2.size()<<endl;
95 for(
typename list<mon>::iterator iter2=list2.begin();
96 iter2!=list2.end();iter2++)
98 cout<<
"je passe ici "<<*iter2<<endl;
100 if(iter2->GetDegree()>maxdeg)
101 maxdeg=iter2->GetDegree();
107 template<
typename mon,
typename Base,
typename typppcm>
110 ,
const typMk &Spoldejavu)
118 for(
int i=0;
i<b.nbvar();
i++)
139 return (res==2)&&(comp==2)&&ppcm[m]&&!
member(Spoldejavu,m);
141 return (res==2)&&(comp==2)&&ppcm[m];
146 template<
typename typPk,
typename Base>
151 ,
const typMk & Spoldejavu)
154 typedef typename typPk::value_type::monom_t
mon;
157 typename typPk::value_type tmp;
165 for(
typename typPk::iterator iter1=Pk.begin();iter1!=Pk.end();iter1++)
166 for(
typename typPk::iterator iter2=iter1;iter2!=Pk.end();iter2++)
168 if (
goodspol(iter1->ind,iter2->ind,ppcm,b))
170 if (
goodspol(iter1->ind,iter2->ind,ppcm,b,Spoldejavu))
174 res.push_back(*iter1);
175 res.push_back(*iter2);
178 tmp.ind.SetCoeff(maxdeg);
183 template<
typename typP>
186 int res=
Degree(P.front());
188 for(
typename typP::iterator iter=P.begin();iter!=P.end();iter++)
195 template<
typename typP>
199 for(
typename typP::const_iterator iter=P.begin();iter!=P.end();iter++)
200 if(
Degree(*iter)==
k) res.push_back(*iter);
203 template<
typename typP,
typename Base>
207 for(
typename typP::const_iterator iter=tmpPk.begin();iter!=tmpPk.end();iter++)
208 for(
typename typP::value_type::const_iterator iterpol=iter->begin();
209 iterpol!=iter->end();iterpol++)
210 if(tmpvar<
lvar(iterpol->rep)) tmpvar=
lvar(iterpol->rep);
214 template<
typename typP,
typename typMk,
typename Base>
217 typedef typename typMk::value_type
mon;
222 for(
typename typP::const_iterator iter=tmpPk.begin();iter!=tmpPk.end();iter++)
224 mon tmp(choice(*iter,b));
228 for(
typename typMk::iterator iter=Mk.begin();iter!=Mk.end();iter++)
229 if(*iter==tmp) {yes=0;
break;};
230 if(yes) Mk.push_back(tmp);
234 tmp.
refuse=(mon*)MAC_REV_MALLOC<mon>(tmp.
taille2*
sizeof(mon));
236 tmp.
accept=(mon*)MAC_REV_MALLOC<mon>(
sizeof(mon));
239 for(
typename typMk::iterator iter=Mk.begin();iter!=Mk.end();iter++,i++)
254 b.
def.push_back(tmp);
258 template <
typename typPk,
typename typMk,
typename typmat >
261 const typMk & lm,
const typmat &mat)
263 typedef typename typPk::value_type POL;
264 typedef typename typMk::value_type monom_t;
266 map<monom_t,int>
index;
268 if (res!=NULL) {
delete res;};
269 for(
typename typMk::const_iterator m = lm.begin(); m!=lm.end(); m++){
274 res=
new typmat(L.size(),lm.size());
277 for(
typename typPk::const_iterator pi = L.begin(); pi != L.end(); ++pi){
278 for(
typename POL::const_iterator m = pi->begin(); m!=pi->end(); m++)
281 if((index.count(*m)))
284 (*res)(l,c-1,m->GetCoeff());
292 template<
typename typMat,
typename typP,
typename typPk,
typename typMk,
typename Base,
typename typdump>
294 ,typPk &Pk, typMk & Mk,
Base & b, typdump & dump)
296 typedef typename typPk::value_type
pol;
299 const typename typP::value_type::order_t (tmpord)(
const mon,
const mon);
315 Mk.erase(Mk.begin(),Mk.end());
322 for(
typename typP::iterator iter=tmpPk.begin();iter!=tmpPk.end();iter++)
323 cout<<
"pol pendant init"<<endl<<*iter<<endl;
333 tmpPk=
Solve(*Mat,tmpPk,&pr,&pc);
340 if(my_rank(*Mat)==(
int)tmpPk.size()) flag=0;
353 for(
typename typP::iterator iter=tmpPk.begin();iter!=tmpPk.end();iter++)
355 Pk.push_back(convert<pol>(*iter,b));
376 template<
typename pol,
typename coeff>
378 const coeff &toto1,
const coeff &toto2 )
381 unsigned int i=0,stock;;
384 register coeff *res1nf,*res2nf,*nfnf,*tmpcoeff;
388 res1.
nf=(coeff*)MAC_REV_REALLOC<coeff>(res1.
nf,res1.
size*
sizeof(coeff)
390 for(i=res1.
size;i<tmp;i++)
396 res2.
nf=(coeff*)MAC_REV_REALLOC<coeff>(res2.
nf,res2.
size*
sizeof(coeff)
398 for(i=res2.
size;i<tmp;i++)
412 res1nf[
i]-=*tmpcoeff*toto1;
413 res2nf[
i]-=*tmpcoeff*toto2;
416 res1nf[i+1]-=*tmpcoeff*toto1;
417 res2nf[i+1]-=*tmpcoeff*toto2;
420 res1nf[i+2]-=*tmpcoeff*toto1;
421 res2nf[i+2]-=*tmpcoeff*toto2;
424 res1nf[i+3]-=*tmpcoeff*toto1;
425 res2nf[i+3]-=*tmpcoeff*toto2;
428 res1nf[i+4]-=*tmpcoeff*toto1;
429 res2nf[i+4]-=*tmpcoeff*toto2;
432 res1nf[i+5]-=*tmpcoeff*toto1;
433 res2nf[i+5]-=*tmpcoeff*toto2;
436 res1nf[i+6]-=*tmpcoeff*toto1;
437 res2nf[i+6]-=*tmpcoeff*toto2;
440 res1nf[i+7]-=*tmpcoeff*toto1;
441 res2nf[i+7]-=*tmpcoeff*toto2;
445 res1nf[i+8]-=*tmpcoeff*toto1;
446 res2nf[i+8]-=*tmpcoeff*toto2;
449 res1nf[i+9]-=*tmpcoeff*toto1;
450 res2nf[i+9]-=*tmpcoeff*toto2;
454 res1nf[i+10]-=*tmpcoeff*toto1;
455 res2nf[i+10]-=*tmpcoeff*toto2;
459 res1nf[i+11]-=*tmpcoeff*toto1;
460 res2nf[i+11]-=*tmpcoeff*toto2;
464 res1nf[i+12]-=*tmpcoeff*toto1;
465 res2nf[i+12]-=*tmpcoeff*toto2;
469 res1nf[i+13]-=*tmpcoeff*toto1;
470 res2nf[i+13]-=*tmpcoeff*toto2;
474 res1nf[i+14]-=*tmpcoeff*toto1;
475 res2nf[i+14]-=*tmpcoeff*toto2;
479 res1nf[i+15]-=*tmpcoeff*toto1;
480 res2nf[i+15]-=*tmpcoeff*toto2;
484 for(
register unsigned int j=i;
j<nf.
size;
j++)
486 res1nf[
j]-=nfnf[
j]*toto1;
487 res2nf[
j]-=nfnf[
j]*toto2;
491 template<
typename pol,
typename coeff>
495 unsigned int i=0,stock;;
503 register coeff *resnf,*nfnf;
508 res.
nf=(coeff*)MAC_REV_REALLOC<coeff>(res.
nf,res.
size*
sizeof(coeff)
509 ,nf.
size*
sizeof(coeff));
521 *resnf++-=*nfnf++*toto;
522 *resnf++-=*nfnf++*toto;
523 *resnf++-=*nfnf++*toto;
524 *resnf++-=*nfnf++*toto;
525 *resnf++-=*nfnf++*toto;
526 *resnf++-=*nfnf++*toto;
527 *resnf++-=*nfnf++*toto;
528 *resnf++-=*nfnf++*toto;
529 *resnf++-=*nfnf++*toto;
530 *resnf++-=*nfnf++*toto;
531 *resnf++-=*nfnf++*toto;
532 *resnf++-=*nfnf++*toto;
533 *resnf++-=*nfnf++*toto;
534 *resnf++-=*nfnf++*toto;
535 *resnf++-=*nfnf++*toto;
536 *resnf++-=*nfnf++*toto;
538 for(
register unsigned j=0;
j<tmp;
j++)
539 *resnf++-=*nfnf++*toto;
542 template<
typename pol,
typename coeff>
546 cout<<
"dans myplus je calcul"<<endl<<invconv<Poly>(res)<<endl<<
547 "toto "<<toto<<endl<<
"nf"<<endl<<invconv<Poly>(nf)<<endl;
550 register unsigned int i=0;
551 register unsigned int ttmp,tmp;
552 register coeff *nfnf=nf.
nf,*resnf;
558 res.
nf=(coeff*)MAC_REV_REALLOC<coeff>(res.
nf,res.
size*
sizeof(coeff)
560 for(
int i=res.
size;i<tmp;i++)
570 for(;i<ttmp;i+=16,resnf+=16,nfnf+=16)
573 resnf[0]-=nfnf[0]*toto;
574 resnf[1]-=nfnf[1]*toto;
575 resnf[2]-=nfnf[2]*toto;
576 resnf[3]-=nfnf[3]*toto;
577 resnf[4]-=nfnf[4]*toto;
578 resnf[5]-=nfnf[5]*toto;
579 resnf[6]-=nfnf[6]*toto;
580 resnf[7]-=nfnf[7]*toto;
581 resnf[8]-=nfnf[8]*toto;
582 resnf[9]-=nfnf[9]*toto;
583 resnf[10]-=nfnf[10]*toto;
584 resnf[11]-=nfnf[11]*toto;
585 resnf[12]-=nfnf[12]*toto;
586 resnf[13]-=nfnf[13]*toto;
587 resnf[14]-=nfnf[14]*toto;
588 resnf[15]-=nfnf[15]*toto;
591 resnf=ptr1;nfnf=ptr2;
592 for(
register unsigned int j=i;
j<tmp;
j++)
593 resnf[
j]-=nfnf[
j]*toto;
595 cout<<
"les resultat "<<endl<<invconv<Poly>(res)<<endl;
600 template<
typename pol>
605 register unsigned int i=0;
606 register unsigned int ttmp,tmp;
607 register coeff *nfnf=nf.
nf,*resnf;;
612 res.
nf=(coeff*)MAC_REV_REALLOC<coeff>(res.
nf,res.
size*
sizeof(coeff)
614 for(
int i=res.
size;i<tmp;i++)
625 resnf[i+1]-=nfnf[i+1];
626 resnf[i+2]-=nfnf[i+2];
627 resnf[i+3]-=nfnf[i+3];
628 resnf[i+4]-=nfnf[i+4];
629 resnf[i+5]-=nfnf[i+5];
630 resnf[i+6]-=nfnf[i+6];
631 resnf[i+7]-=nfnf[i+7];
632 resnf[i+8]-=nfnf[i+8];
633 resnf[i+9]-=nfnf[i+9];
634 resnf[i+10]-=nfnf[i+10];
635 resnf[i+11]-=nfnf[i+11];
636 resnf[i+12]-=nfnf[i+12];
637 resnf[i+13]-=nfnf[i+13];
638 resnf[i+14]-=nfnf[i+14];
639 resnf[i+15]-=nfnf[i+15];
642 for(
register unsigned int j=i;
j<tmp;
j++)
646 template<
typename pol,
typename coeff>
650 register unsigned int i=0;
651 register unsigned int ttmp;
652 register unsigned int tmp;
653 register coeff *resnf,*nfnf,*nf2nf;
658 res.
nf=(coeff*)MAC_REV_REALLOC<coeff>(res.
nf,res.
size*
sizeof(coeff)
659 ,maxsize*
sizeof(coeff));
660 for(
int i=res.
size;i<maxsize;i++)
669 ttmp=(nf.
size/16)*16;
679 resnf[
i]-=nfnf[
i]*toto+nf2nf[
i]*toto2;
685 resnf[i+1]-=nfnf[i+1]*toto+nf2nf[i+1]*toto2;
691 resnf[i+2]-=nfnf[i+2]*toto+nf2nf[i+2]*toto2;
697 resnf[i+3]-=nfnf[i+3]*toto+nf2nf[i+3]*toto2;
703 resnf[i+4]-=nfnf[i+4]*toto+nf2nf[i+4]*toto2;
709 resnf[i+5]-=nfnf[i+5]*toto+nf2nf[i+5]*toto2;
715 resnf[i+6]-=nfnf[i+6]*toto+nf2nf[i+6]*toto2;
721 resnf[i+7]-=nfnf[i+7]*toto+nf2nf[i+7]*toto2;
727 resnf[i+8]-=nfnf[i+8]*toto+nf2nf[i+8]*toto2;
733 resnf[i+9]-=nfnf[i+9]*toto+nf2nf[i+9]*toto2;
739 resnf[i+10]-=nfnf[i+10]*toto+nf2nf[i+10]*toto2;
745 resnf[i+11]-=nfnf[i+11]*toto+nf2nf[i+11]*toto2;
751 resnf[i+12]-=nfnf[i+12]*toto+nf2nf[i+12]*toto2;
757 resnf[i+13]-=nfnf[i+13]*toto+nf2nf[i+13]*toto2;
763 resnf[i+14]-=nfnf[i+14]*toto+nf2nf[i+14]*toto2;
770 resnf[i+15]-=nfnf[i+15]*toto+nf2nf[i+15]*toto2;
773 for(
register unsigned int j=i;
j<nf.
size;
j++)
774 resnf[
j]-=nfnf[
j]*toto+nf2nf[
j]*toto2;
775 for(
register unsigned int j=nf.
size;
j<nf2.
size;
j++)
776 resnf[
j]-=nf2nf[
j]*toto2;
781 ttmp=(nf2.
size/16)*16;
796 resnf[i+1]-=tmp1+tmp2;
802 resnf[i+2]-=tmp1+tmp2;
808 resnf[i+3]-=tmp1+tmp2;
814 resnf[i+4]-=tmp1+tmp2;
820 resnf[i+5]-=tmp1+tmp2;
826 resnf[i+6]-=tmp1+tmp2;
832 resnf[i+7]-=tmp1+tmp2;
838 resnf[i+8]-=tmp1+tmp2;
844 resnf[i+9]-=tmp1+tmp2;
850 resnf[i+10]-=tmp1+tmp2;
856 resnf[i+11]-=tmp1+tmp2;
862 resnf[i+12]-=tmp1+tmp2;
868 resnf[i+13]-=tmp1+tmp2;
874 resnf[i+14]-=tmp1+tmp2;
880 resnf[i+15]-=tmp1+tmp2;
883 for(
register unsigned int j=i;
j<nf2.
size;
j++)
884 resnf[
j]-=nfnf[
j]*toto+nf2nf[
j]*toto2;
885 for(
register unsigned int j=nf2.
size;
j<nf.
size;
j++)
886 resnf[
j]-=nfnf[
j]*toto;
891 template<
typename pol,
typename coeff>
893 const pol &nf2,
const coeff toto2,
894 const pol &nf3,
const coeff toto3,
895 const pol &nf4,
const coeff toto4)
898 register unsigned int i=0;
899 register unsigned int ttmp;
900 register unsigned int tmp;
901 coeff *resnf,*nfnf,*nf2nf,*nf3nf,*nf4nf;
906 res.
nf=(coeff*)MAC_REV_REALLOC<coeff>(res.
nf,res.
size*
sizeof(coeff)
907 ,maxsize*
sizeof(coeff));
908 for(
int i=res.
size;i<maxsize;i++)
917 ttmp=(minsize/16)*16;
922 resnf[
i]-=nfnf[
i]*toto+nf2nf[
i]*toto2
923 +nf3nf[
i]*toto3+nf4nf[
i]*toto4;
924 resnf[i+1]-=nfnf[i+1]*toto+nf2nf[i+1]*toto2
925 +nf3nf[i+1]*toto3+nf4nf[i+1]*toto4;
926 resnf[i+2]-=nfnf[i+2]*toto+nf2nf[i+2]*toto2
927 +nf3nf[i+2]*toto3+nf4nf[i+2]*toto4;
928 resnf[i+3]-=nfnf[i+3]*toto+nf2nf[i+3]*toto2
929 +nf3nf[i+3]*toto3+nf4nf[i+3]*toto4;
930 resnf[i+4]-=nfnf[i+4]*toto+nf2nf[i+4]*toto2
931 +nf3nf[i+4]*toto3+nf4nf[i+4]*toto4;
932 resnf[i+5]-=nfnf[i+5]*toto+nf2nf[i+5]*toto2
933 +nf3nf[i+5]*toto3+nf4nf[i+5]*toto4;
934 resnf[i+6]-=nfnf[i+6]*toto+nf2nf[i+6]*toto2
935 +nf3nf[i+6]*toto3+nf4nf[i+6]*toto4;
936 resnf[i+7]-=nfnf[i+7]*toto+nf2nf[i+7]*toto2
937 +nf3nf[i+7]*toto3+nf4nf[i+7]*toto4;
938 resnf[i+8]-=nfnf[i+8]*toto+nf2nf[i+8]*toto2
939 +nf3nf[i+8]*toto3+nf4nf[i+8]*toto4;
940 resnf[i+9]-=nfnf[i+9]*toto+nf2nf[i+9]*toto2
941 +nf3nf[i+9]*toto3+nf4nf[i+9]*toto4;
942 resnf[i+10]-=nfnf[i+10]*toto+nf2nf[i+10]*toto2
943 +nf3nf[i+10]*toto3+nf4nf[i+10]*toto4;
944 resnf[i+11]-=nfnf[i+11]*toto+nf2nf[i+11]*toto2
945 +nf3nf[i+11]*toto3+nf4nf[i+11]*toto4;
946 resnf[i+12]-=nfnf[i+12]*toto+nf2nf[i+12]*toto2
947 +nf3nf[i+12]*toto3+nf4nf[i+12]*toto4;
948 resnf[i+13]-=nfnf[i+13]*toto+nf2nf[i+13]*toto2
949 +nf3nf[i+13]*toto3+nf4nf[i+13]*toto4;
950 resnf[i+14]-=nfnf[i+14]*toto+nf2nf[i+14]*toto2
951 +nf3nf[i+14]*toto3+nf4nf[i+14]*toto4;
952 resnf[i+15]-=nfnf[i+15]*toto+nf2nf[i+15]*toto2
953 +nf3nf[i+15]*toto3+nf4nf[i+15]*toto4;
956 for(
register unsigned int j=i;
j<nf.
size;
j++)
957 resnf[
j]-=nfnf[
j]*toto;
958 for(
register unsigned int j=i;
j<nf2.
size;
j++)
959 resnf[
j]-=nf2nf[
j]*toto2;
960 for(
register unsigned int j=i;
j<nf3.
size;
j++)
961 resnf[
j]-=nf3nf[
j]*toto3;
962 for(
register unsigned int j=i;
j<nf4.
size;
j++)
963 resnf[
j]-=nf4nf[
j]*toto4;
968 template<
typename mon,
typename Base>
984 template<
typename mon,
typename Base>
1000 template<
typename typpol,
typename typdump,
typename Base>
1001 typpol
nf(
int var ,
int indmon,
const typdump &dump,
const Base & b)
1005 typedef typename typdump::value_type
dumpstruct;
1013 typename typdump::const_iterator iter;
1018 for(iter=dump.begin();
1019 (iter!=dump.end()) && (iter->k!=deg);iter++);
1025 if(iter!=dump.end())
1028 for(i=0;i<iter->size;i++)
1031 if(iter->nf[i].ind.rep==tmpmon.
rep)
1046 template<
typename typpol,
typename typdump,
typename Base,
typename mon>
1047 typpol
nf(
const mon &ind,
const typdump &dump,
const Base & b)
1051 typedef typename typdump::value_type
dumpstruct;
1057 typename typdump::const_iterator iter;
1059 for(iter=dump.begin();
1060 (iter!=dump.end()) && (iter->k!=deg);iter++);
1061 if(iter!=dump.end())
1064 for(i=0;i<iter->size;i++)
1066 if(iter->nf[i].ind.rep==ind.
rep)
1076 template<
typename typpol,
typename typdump,
typename Base,
typename mon>
1077 typpol
inline mult(
int i,
const typpol &
pol,
const typdump &dump,
1078 const Base &b,
mon **exce,
int &exsize)
1080 typedef typename typpol::coeff_t coeff;
1083 coeff *res=NULL,*polnf;
1085 mon *stockmontab=(
mon*)MAC_REV_MALLOC<mon>(pol.size*
sizeof(
mon));
1088 (*exce)=(
mon*)MAC_REV_MALLOC<mon>((pol.size+1)*
sizeof(
mon));
1089 int *stockindicetab=(
int*)
malloc(pol.size*
sizeof(
int)),*tmpptr;
1091 static int nbmyplus=0;
1094 coeff stockcoeffplus;
1095 typpol stockpolplus;
1099 coeff stockcoeffplus[4];
1100 typpol stockpolplus[4];
1103 tmpptr=stockindicetab;
1105 for(
int j=0;
j<pol.size;++
j)
1109 int stockindice2=mulind(
j,i,b);
1110 *tmpptr++=stockindice2;
1115 stockmontab[
j]=tmpmon;
1116 int stockindice2=indice2<mon>(tmpmon,b);
1117 *tmpptr++=stockindice2;
1123 if (maxind<stockindice2)
1124 maxind=stockindice2;
1128 ret.nf=(coeff*)MAC_REV_MALLOC<coeff>((maxind+1)*
sizeof(coeff));
1129 for(
int j=0;
j<=maxind;
j++)
1130 ((coeff*)(ret.nf))[
j]=0;
1133 tmpptr=stockindicetab;
1135 for(
int j=0;
j<pol.size;++
j,polnf++)
1137 const coeff stockpol=*polnf;
1140 int stockindice2=*tmpptr++;
1142 if (stockindice2>=0)
1144 ret.nf[stockindice2]+=stockpol;
1161 tmp=nf<typpol>(
i,
j,dump,b);
1163 tmp=nf<typpol>(stockmontab[
j],dump,b);
1176 stockpolplus[0],stockcoeffplus[0],
1177 stockpolplus[1],stockcoeffplus[1],
1178 stockpolplus[2],stockcoeffplus[2]);
1182 stockcoeffplus[flagplus]=stockpol;
1183 stockpolplus[flagplus]=tmp;
1192 myplus22(ret,tmp,stockpol,stockpolplus,stockcoeffplus);
1196 stockcoeffplus=stockpol;
1214 (*exce)[noquo]=
mon(i,1);
1217 (*exce)[noquo]*=tmpmon;
1218 (*exce)[noquo]*=stockpol;
1230 for(
int ii=0;ii<flagplus;ii++)
1231 my_plus(ret,stockpolplus[ii],stockcoeffplus[ii]);
1237 my_plus(ret,stockpolplus,stockcoeffplus);
1244 (*exce)[noquo++]=ret.ind;
1246 (*exce)=(
mon*)MAC_REV_REALLOC<mon>((*exce),(pol.size+1)*
sizeof(
mon)
1247 ,(noquo)*
sizeof(
mon));
1248 ret.ind.SetCoeff(noquo+1);
1250 MAC_REV_FREE<mon>(stockmontab,pol.size*
sizeof(
mon));
1252 free(stockindicetab);
1261 template <
typename Mon,
typename Base>
1277 template<
typename typmon,
typename Base>
1295 template<
typename typPk,
typename typP,
typename typexceed,
1296 typename typsize ,
typename Base>
1299 typedef typename typP::value_type polalp;
1300 typedef typename polalp::order_t ord;
1301 typedef typename polalp::monom_t
mon;
1302 typedef typename typPk::value_type
pol;
1304 coeff * tabcoeff=NULL;
1305 int * tabindices=NULL;
1308 cout<<
"entree dans conv_merge"<<endl;
1311 for(
int i=0;
i<p->taille1;
i++)
1313 cout<<
"p.accept[i] "<<p->accept[
i]<<endl;
1315 for(
int i=0;
i<p->taille2;
i++)
1317 cout<<
"p.refuse[i] "<<p->refuse[
i]<<endl;
1320 cout<<
"p-taille2 "<<b.
begin()->taille2<<
" "<<b.
begin()->taille2-1<<endl;
1321 cout<<
"I=ideal("<<endl;
1324 for(
int i=0;
i<p->taille2-1;
i++)
1326 cout<<p->refuse[
i]<<
","<<endl;
1328 if(p->taille2>=1) cout<<p->refuse[p->taille2-1]<<
")"<<endl;
1331 for(
typename typP::iterator iter=P.begin();iter!=P.end();iter++)
1338 tabcoeff=(coeff*)MAC_REV_REALLOC<coeff>((
void*)tabcoeff,
1339 tabsize*
sizeof(coeff),
1340 iter->size()*
sizeof(coeff));
1341 tabindices=(
int*)realloc((
void*)tabindices,iter->size()*
sizeof(int));
1342 tabsize=iter->size();
1344 for(
int i=0;
i<tabsize;
i++)
1351 tmpex=(mon*)MAC_REV_REALLOC<mon>((
void*)tmpex,0,tabsize*
sizeof(
mon));
1354 for(
typename polalp::iterator iterpol=iter->begin();
1355 iterpol!=iter->end();iterpol++)
1358 if (
IsinB(*iterpol,b))
1362 if(tabindices[i]>max) max=tabindices[
i];
1368 if(!
Iszero(iterpol->GetCoeff()))
1369 tmpex[comp++]=*iterpol;
1372 tmpex=(mon*)MAC_REV_REALLOC<mon>((
void*)tmpex,tabsize*
sizeof(
mon)
1373 ,(comp+1)*
sizeof(
mon));
1375 tmp.
nf=(coeff*)MAC_REV_MALLOC<coeff>(tmp.
size*
sizeof(coeff));
1378 for(
int j=0;
j<i;
j++)
1379 tmp.
nf[tabindices[
j]]=tabcoeff[
j];
1382 ex.push_back(tmpex);
1383 sizeex.push_back(comp);
1386 MAC_REV_FREE<coeff>(tabcoeff,tabsize*
sizeof(coeff));
1390 template<
typename typMk>
1391 int member(
const typMk & tmpMk,
const typename typMk::value_type
mon)
1394 for(
typename typMk::const_iterator iter=tmpMk.begin();
1395 iter!=tmpMk.end();iter++)
1396 if(iter->rep==mon.rep) {res=1;
break;}
1400 template<
typename typP,
typename typPk,
typename typMk,
typename typexceed
1401 ,
typename typsize,
typename typdump,
typename Base>
1403 ,typexceed & exceed,typsize & sizeex
1404 ,
const typdump & dump,
const Base & b)
1406 typedef typename typPk::value_type
pol;
1408 typedef typename typexceed::value_type typex;
1409 typedef typename typMk::value_type
mon;
1410 typedef typename typP::value_type polyalp;
1412 for(
typename typPk::iterator iter=workvect.begin();
1413 iter!=workvect.end();iter++)
1417 typex tmpex=(mon*)MAC_REV_MALLOC<mon>(
sizeof(mon)*tmpMk.size());
1418 for(
unsigned int i=0;
i<tmpMk.size();
i++)
1421 for(
int i=0;
i<iter->size;
i++)
1427 if(!
IsinB(tmpmon,b))
1431 tmpex[sizeexceed++]=tmpmon*iter->nf[
i];
1436 projpol+=tmpmon*iter->nf[
i];
1442 if(iter->ind.GetDegree()>0)
1443 tmpex[sizeexceed++]=iter->ind;
1444 exceed.push_back(tmpex);
1445 tobeproj.push_back(projpol);
1448 sizeex.push_back(sizeexceed);
1451 proj(tobeproj,dump,b);
1453 typename typPk::iterator iter=workvect.begin();
1454 typename typexceed::iterator iterex=exceed.begin();
1455 typename typsize::iterator itersize=sizeex.begin();
1456 for(
typename typP::iterator iterproj=tobeproj.begin();
1457 iterproj!=tobeproj.end();iterproj++,iter++,iterex++,itersize++)
1460 int maxend=iter->size-1;
1461 for(
typename polyalp::iterator iterpol=iterproj->begin();
1462 iterpol!=iterproj->end();iterpol++)
1467 iter->nf=(coeff*)MAC_REV_REALLOC<coeff>(iter->nf
1468 ,iter->size*
sizeof(coeff)
1469 ,(maxend+1)*
sizeof(coeff));
1470 for(
int i=iter->size;
i<=maxend;
i++)
1472 for(
typename polyalp::iterator iterpol=iterproj->begin();
1473 iterpol!=iterproj->end();iterpol++)
1475 if(
IsinB(*iterpol,b))
1477 iter->nf[
mon2int(*iterpol)]+=iterpol->GetCoeff();
1483 for(;(i<(*itersize))&&((*iterex)[i].rep!=iterpol->rep);i++);
1486 (*iterex)[
i]+=*iterpol;
1490 (*iterex)[(*itersize)++]=*iterpol;
1495 *iterex=(typex)MAC_REV_REALLOC<mon>(*iterex,tmpMk.size()*
sizeof(
mon)
1496 ,(*itersize)*
sizeof(
mon));
1497 iter->size=maxend+1;
1504 template<
typename typMat,
typename typPk,
typename typP,
1505 typename typMk,
typename Base,
typename typdump,
typename typrecall>
1507 int &
k,Base &b, typdump &dump,typrecall &recall
1518 typedef typename typMk::value_type
mon;
1519 typedef typename typP::value_type::order_t ord;
1520 typedef typename typPk::value_type
pol;
1522 typedef typename typP::value_type polyalp;
1523 typPk tmpPk,workvect;
1526 list<int> sizeexceed;
1527 int nbproj=0,flagdoplus=1;
1530 cerr<<
"k on entering newpkmkmatrixof "<<k<<endl;
1549 #ifdef NO_TWICE_FALL
1550 for(
typename typP::iterator iter=P.begin();iter!=P.end();iter++)
1551 if(
Degree(*iter)==k+1) P.erase(iter--);
1552 for(
typename typP::iterator iter=ttmpP.begin()
1553 ;iter!=ttmpP.end();iter++)
1562 nbproj=ttmpP.size();
1575 recover(tmpPk,Mk,dump,tmpdeg);
1583 forget(b,dump,tmpdeg,recall);
1593 for(
typename typP::iterator iter=P.begin()
1594 ;iter!=P.end();iter++)
1595 if(
Degree(*iter)==tmpdeg)
1601 nbproj=ttmpP.size();
1610 Mk.erase(Mk.begin(),Mk.end());
1611 for (
typename typPk::iterator iterpk=tmpPk.begin();
1612 iterpk!=tmpPk.end();iterpk++)
1616 if (
IsinB(iterpk->ind,b))
1619 ;iterb!=b.
end();iterb++)
1621 iterb->refuse=(mon*)MAC_REV_REALLOC<mon>
1622 (iterb->refuse,(iterb->taille2)*
sizeof(
mon),
1623 (iterb->taille2+1)*
sizeof(
mon));
1624 iterb->refuse[iterb->taille2]=iterpk->ind;
1625 iterb->refuse[iterb->taille2].SetCoeff(1);
1630 for(
typename typPk::iterator iter=tmpPk.begin()
1631 ;iter!=tmpPk.end();iter++)
1633 mon *tmp=(mon*)MAC_REV_MALLOC<mon>(
sizeof(mon));
1635 tmpMk.push_back(*tmp);
1636 exceed.push_back(tmp);
1637 sizeexceed.push_back(1);
1655 map<mon,int,ord> monmember;
1661 for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++)
1666 mon tmpmon=iter->ind*
mon(
i,1);
1669 if(!(monmember).count(tmpmon))
1671 typename typrecall::iterator iterrec;
1672 (monmember)[tmpmon]=1;
1673 tmpMk.push_back(tmpmon);
1675 for(iterrec=verytmp.begin();
1676 (iterrec!=verytmp.end())
1677 &&(!(iterrec->ind.rep==tmpmon.
rep));
1679 if(iterrec!=verytmp.end())
1683 workvect.push_back(*iterrec);
1684 verytmp.erase(iterrec);
1692 tmpPk.push_back(
mult(
i,*iter,dump,b,&tmp,tmpsize));
1696 exceed.push_back(tmp);
1697 sizeexceed.push_back(tmpsize);
1699 cout<<
"coucou"<<endl;
1700 for(
int j=0;
j<tmpsize;
j++)
1720 for(
typename typPk::iterator iter=verytmp.begin();iter!=verytmp.end();iter++)
1733 if(
mon2int(iter->ind)>=iter->size)
1735 iter->nf=(coeff*)MAC_REV_REALLOC<coeff>(iter->nf,
1736 iter->size*
sizeof(coeff)
1737 ,(
mon2int(iter->ind)+1)*
sizeof(coeff));
1741 workvect.push_back(*iter);
1742 verytmp.erase(iter--);
1747 list<mon*> tmpexceed;
1748 list<int> tmpsizeex;
1790 for(list<int>::iterator iter=sizeexceed.begin();iter!=sizeexceed.end()
1809 typename typPk::iterator tmpiter=tmpPk.begin();
1810 list<int>::iterator itersize=sizeexceed.begin();
1811 for(
typename list<mon*>::iterator iter=exceed.begin();iter!=exceed.end()
1812 ;tmpiter++,iter++,itersize++)
1814 cout<<
"pour un exceeed la taille attendue est "
1816 for(
int i=0;*itersize>
i;i++)
1818 cout<<
"le gus que je regarde "<<(*iter)[
i]<<endl;
1819 if(!
member(tmpMk,(*iter)[i]))
1821 cout<<(*iter)[
i]<<endl;
1822 cout<<
"dans ce pol "<<invconv<Poly>(*tmpiter)<<endl;
1823 cout<<
"l'ind "<<tmpiter->ind<<endl;
1830 cout<<
"nnz of matrix "<<nnz<<endl;
1832 void * toto=MAC_REV_MALLOC<coeff>(nnz*
sizeof(
typename typMat::coeff_t));
1834 if (mat.nzval!=NULL) MAC_REV_FREE<typename typMat::coeff_t>
1836 *
sizeof(
typename typMat::coeff_t));
1837 mat.nrow=tmpPk.size();
1838 mat.ncol=tmpMk.size();
1842 for(
int i=0;
i<nnz;
i++)
1843 ((
typename typMat::coeff_t*)mat.nzval)[
i]=(coeff)1000000000000.0;
1846 if(mat.rowind!=NULL)
free(mat.rowind);
1847 mat.rowind=(
int*)
malloc(nnz*
sizeof(
int));
1849 if(mat.colptr!=NULL)
free(mat.colptr);
1850 mat.colptr=(
int*)
malloc((mat.ncol+1)*
sizeof(int));
1852 cout<<
"matrix of size "<<mat.nrow<<
"x"<<mat.ncol<<endl;
1855 int *ncol=(
int*)calloc(mat.ncol,
sizeof(
int));
1857 map<mon,int,ord> mapint;
1858 typename typMk::iterator itermk=tmpMk.begin();
1859 typename typPk::iterator iterpk=tmpPk.begin();
1860 typename list<mon*>::iterator iterex=exceed.begin();
1861 list<int>::iterator itersize=sizeexceed.begin();
1867 indmon[
i]=
malloc(size*
sizeof(
int));
1869 for(
int i=0;itermk!=tmpMk.end();
i++,itermk++)
1878 for(
int i=0;itermk!=tmpMk.end();
i++,itermk++)
1882 iterpk=tmpPk.begin();
1883 for(;iterpk!=tmpPk.end();iterpk++,iterex++,itersize++,line_num++)
1896 for(
int i=0;*itersize>
i;i+=2)
1897 ++ncol[indmon[(*iterex)[
i]][(*iterex)[i+1]]];
1899 for(
int i=0;*itersize>
i;i++)
1904 ++ncol[mapint[(*iterex)[
i]]];
1918 typename typMat::coeff_t* nzval=(
typename typMat::coeff_t*)mat.nzval;
1919 int *rowind=mat.rowind;
1920 int *colptr=mat.colptr;
1923 for(
int i=0;
i<mat.ncol-1;
i++)
1925 colptr[
i+1]=colptr[
i]+ncol[
i];
1929 colptr[mat.ncol]=mat.nnz;
1936 itermk=tmpMk.begin();
1937 iterpk=tmpPk.begin();
1938 iterex=exceed.begin();
1939 itersize=sizeexceed.begin();
1943 for(;0&&(line_num < (int)(tmpPk.size()-nbproj));
1944 iterpk++,iterex++,itersize++,line_num++)
1948 mon tmpmon=iterpk->ind;
1951 const unsigned int tmpplus
1952 =mapint[tmpmon]+1,tmp=tmpplus-1;
1955 nzval[colptr[tmpplus]-ncol[tmp]]=1;
1961 rowind[colptr[tmpplus]-ncol[tmp]]=line_num;
1966 for(
int i=0;*itersize>
i;i++)
1968 const coeff stock=(*iterex)[
i].GetCoeff();
1969 (*iterex)[
i].SetCoeff(1);
1970 const unsigned int tmpplusex=mapint[(*iterex)[
i]]+1;
1971 const unsigned int tmpex=mapint[(*iterex)[
i]];
1972 nzval[colptr[tmpplusex]-ncol[tmpex]]
1974 rowind[colptr[tmpplusex]-ncol[tmpex]]=line_num;
1979 MAC_REV_FREE<mon>(*iterex,*itersize*
sizeof(
mon));
1982 for(;(iterpk!=tmpPk.end());iterpk++,iterex++,itersize++,line_num++)
1987 for(
int i=0;*itersize>
i;i++)
1989 const coeff stock=(*iterex)[
i].GetCoeff();
1990 (*iterex)[
i].SetCoeff(1);
1991 const unsigned int tmpplusex=mapint[(*iterex)[
i]]+1;
1992 const unsigned int tmpex=tmpplusex-1;
1993 nzval[colptr[tmpplusex]-ncol[tmpex]]
1995 rowind[colptr[tmpplusex]-ncol[tmpex]]=line_num;
1999 MAC_REV_FREE<mon>(*iterex,*itersize*
sizeof(
mon));
2005 for(
typename typPk::iterator iterpk=tmpPk.begin()
2006 ;iterpk!=tmpPk.end();iterpk++)
2007 iterpk->ind.SetCoeff(1);
2030 template<
typename typdump,
typename mon,
typename pol>
2035 typename typdump::const_iterator iter=dump.begin();
2036 for(;(iter!=dump.end())&&(iter->k!=d);iter++);
2038 if(iter!=dump.end())
2040 for(i=0;(i<iter->size)&&(iter->nf[i].ind.rep!=m.
rep);i++);
2063 template<
typename iterator,
typename mon,
typename Base>
2068 if(iter1->ind.GetDegree(
i)>iter2->ind.GetDegree(
i))
2070 if(iter2->ind.GetDegree(
i)>iter1->ind.GetDegree(
i))
2075 template <
typename mon,
typename pol,
typename typdump,
typename Base>
2080 static const mon monzero=
mon(0);
2083 int *place=(
int*)MAC_REV_MALLOC<int>(p.
size*
sizeof(
int));
2105 cout<<
"p en entree"<<invconv<Poly>(p)<<endl;
2106 cout<<
"target "<<targetind<<
" et ind "<<p.
ind<<
" et var "<<varref<<endl;
2116 place[
i]=mulind(
i,varref,b);
2117 if (place[
i]>maxref)
2127 if(maxref<indtmpmon)
2140 MAC_REV_MALLOC<typename pol::coeff_t>
2142 for(
int i=0;
i<=maxref;
i++)
2153 pol stock=nf<pol,typdump,Base>(varref,
i,dump,b);
2163 myplus22(res,stockpol,stockcoeff,stock,p.
nf[i]);
2174 res.
nf[place[
i]]+=p.
nf[
i];
2204 my_plus(res,stockpol,stockcoeff);
2209 MAC_REV_FREE<int>(place,p.
size*
sizeof(int));
2211 cout<<
" apres reduction "<<invconv<Poly>(res)<<endl;
2216 template <
typename typPk,
typename typdump,
typename Base>
2217 void ReduceSpol(typPk &S,
const typdump & dump,typPk &redspol,
const Base &b)
2219 typedef typename typPk::value_type
pol;
2223 list<typPk> membermon;
2225 cout<<
"en entree de RedSpol S.size "<<S.size()/2<<endl;
2226 for(
typename typPk::iterator iterS=S.begin();iterS!=S.end();iterS++,iterS++)
2228 typename typPk::iterator iterS2=iterS;
2229 typename list<mon>::iterator itermon=leadmon.begin();
2230 typename list<typPk>::iterator itermemb=membermon.begin();
2231 mon var1,var2,tmpleadmon;
2233 varmult(iterS,iterS2,var1,var2,b);
2234 tmpleadmon=iterS->ind*var1;
2235 for(;itermon!=leadmon.end()&&itermon->rep!=tmpleadmon.
rep;
2236 itermon++,itermemb++);
2237 if(itermon!=leadmon.end())
2240 for(
typename typPk::iterator tmpiter=itermemb->begin();
2241 tmpiter!=itermemb->end();tmpiter++)
2243 if(tmpiter->ind.rep==iterS->ind.rep) yes1=0;
2244 if(tmpiter->ind.rep==iterS2->ind.rep) yes2=0;
2246 if(yes1) itermemb->push_back(*iterS);
2247 if(yes2) itermemb->push_back(*iterS2);
2252 leadmon.push_back(tmpleadmon);
2253 membermon.push_back(verytmp);
2254 membermon.back().push_back(*iterS);
2255 membermon.back().push_back(*iterS2);
2261 typename list<mon>::iterator itermon=leadmon.begin();
2262 typename list<typPk>::iterator itermemb=membermon.begin();
2263 for(;itermon!=leadmon.end();itermon++,itermemb++)
2265 typename typPk::value_type ref;
2266 typename typPk::iterator tmpiter=itermemb->begin();
2267 ref=
halfred(*itermon,*tmpiter,dump,b);
2271 for(;tmpiter!=itermemb->end();tmpiter++)
2273 typename typPk::value_type redcur;
2274 redcur=
halfred(*itermon,*tmpiter,dump,b);
2282 redspol.push_back(redcur);
2286 MAC_REV_FREE<coeff>(redcur.nf,redcur.size*
sizeof(coeff));
2289 MAC_REV_FREE<coeff>(ref.nf,ref.size*
sizeof(coeff));
2294 template <
typename typPk,
typename typdump,
typename Base>
2297 typedef typename typPk::value_type
pol;
2300 const coeff zero(0);
2302 for(
typename typPk::iterator iterS=S.begin();iterS!=S.end();iterS++,iterS++)
2304 typename typPk::iterator iterS2=iterS;
2306 typename typPk::value_type res;
2314 varmult(iterS,iterS2,var1,var2,b);
2317 for(
int i=0;
i<iterS->size;
i++)
2320 if(iterS->nf[
i]!=zero)
2324 if(
IsinB(var1*tmpmon,b))
2328 for(
int i=0;
i<iterS2->size;
i++)
2331 if(iterS2->nf[
i]!=zero)
2335 if(
IsinB(var2*tmpmon,b))
2339 res.nf=(
typename typPk::value_type::coeff_t*)
2340 MAC_REV_MALLOC<typename typPk::value_type::coeff_t>
2341 ((max+1)*
sizeof(
typename typPk::value_type::coeff_t));
2348 if(iterS->nf[
i]!=zero)
2352 if(!
IsinB(var1*tmpmon,b))
2366 res.nf[
mon2int(var1*tmpmon)]+=iterS->nf[
i];
2372 for(
int i=0;
i<iterS2->size;
i++)
2375 if(iterS2->nf[
i]!=zero)
2383 if(!
IsinB(var2*tmpmon,b))
2389 my_plus(res,stock,(coeff)((coeff)(-1)*iterS2->nf[
i]));
2397 res.nf[
mon2int(var2*tmpmon)]-=iterS2->nf[
i];
2408 redspol.push_back(res);
2414 MAC_REV_FREE<coeff>(res.nf,res.size*
sizeof(coeff));
2421 template<
typename typPk>
2424 typedef typename typPk::value_type::monom_t
mon;
2428 for(
typename typPk::const_iterator iter=l.begin() ;iter!=l.end();iter++)
2432 for(
int i=0;
i<iter->size;
i++)
2440 if (iter->ind.GetCoeff()==(coeff)1)
2441 mmax=(mmax<iter->ind.GetDegree())?iter->ind.GetDegree():mmax;
2445 if(res==-1) res=mmax;
2446 res=(mmax>res)?res:mmax;
2453 template<
typename typP,
typename typPk,
typename typMk,
typename Base
2455 void Crochetchoix(
const typP & P,typPk & Pk, typMk & Mk, typPk & redspol,
int k
2456 ,typdump & dump, Base &b)
2458 typedef typename typP::value_type polyalp;
2459 typedef typename polyalp::monom_t
mon;
2460 typedef typename polyalp::coeff_t coeff;
2461 typPk res=
Crochet(redspol,k),tmpres;
2465 for(
typename typPk::iterator iter=res.begin();iter!=res.end();iter++)
2467 for(
typename typPk::iterator iterredspol=redspol.begin();
2468 iterredspol!=redspol.end();iterredspol++)
2469 if(iter->nf==iterredspol->nf)
2471 redspol.erase(iterredspol);
2475 for(
typename typPk::iterator iter=res.begin();iter!=res.end();iter++)
2480 iter->ind=choice(invconv<polyalp>(*iter),b);
2497 *iter/=iter->ind.GetCoeff();
2498 iter->ind*=(coeff)1/iter->ind.GetCoeff();
2499 iter->nf[
mon2int(iter->ind)]=0;
2512 tmpres.push_back(*iter);
2517 for(
typename typPk::iterator iterPk=Pk.begin();iterPk!=Pk.end();iterPk++)
2518 if((
mon2int(iter->ind)<iterPk->size)&&
2519 (iterPk->nf[
mon2int(iter->ind)]!=(coeff)0))
2524 iterPk->nf[
mon2int(iter->ind)]=0;
2529 for(
typename typPk::iterator iterredspol=iter;iterredspol!=res.end()
2534 if(
mon2int(iter->ind)<iterredspol->size &&
2535 iterredspol->nf[
mon2int(iter->ind)]!=(coeff)0)
2538 iterredspol->nf[
mon2int(iter->ind)]=0;
2546 iterb->refuse=(mon*)MAC_REV_REALLOC<mon>
2547 (iterb->refuse,(iterb->taille2)*
sizeof(
mon),
2548 (iterb->taille2+1)*
sizeof(
mon));
2549 iterb->refuse[iterb->taille2]=iter->ind;
2550 iterb->refuse[iterb->taille2].SetCoeff(1);
2557 for (
typename typPk::iterator iterpk=Pk.begin();iterpk!=Pk.end();iterpk++)
2560 if (
IsinB(iterpk->ind,b))
2564 iterb->refuse=(mon*)MAC_REV_REALLOC<mon>
2565 (iterb->refuse,(iterb->taille2)*
sizeof(
mon),
2566 (iterb->taille2+1)*
sizeof(
mon));
2567 iterb->refuse[iterb->taille2]=iterpk->ind;
2568 iterb->refuse[iterb->taille2].SetCoeff(1);
2578 template<
typename typPk>
2581 typename typPk::const_iterator iterpk=--Pk.end();
2582 for(
typename typPk::iterator iter=redspol.begin();
2583 iter!=redspol.end();iter++)
2585 if(iter->nf!=iterpk->nf)
2586 MAC_REV_FREE<typename typPk::value_type::coeff_t>(iter->nf
2588 *
sizeof(
typename typPk::value_type::coeff_t));
2592 template<
typename typP,
typename typPk,
typename typMk
2593 ,
typename Base,
typename typdump,
typename typrecall>
2595 ,
int &k,typdump &dump, Base &b, typrecall & recall)
2597 template<
typename typP,
typename typPk,
typename typMk
2598 ,
typename Base,
typename typdump,
typename typrecall>
2600 ,
int &k,typdump &dump, Base &b, typrecall & recall
2610 typedef typename typP::value_type polyalp;
2611 typedef typename polyalp::monom_t
mon;
2612 typedef typename polyalp::coeff_t coeff;
2616 typPk res=
Crochet(redspol,k),tmpres;
2617 for(
typename typPk::iterator iter=res.begin();iter!=res.end();iter++)
2619 for(
typename typPk::iterator iterredspol=redspol.begin();
2620 iterredspol!=redspol.end();iterredspol++)
2621 if(iter->nf==iterredspol->nf)
2623 redspol.erase(iterredspol);
2628 for(
typename typPk::iterator iter=res.begin();iter!=res.end();iter++)
2634 iter->ind=choice(*iter,b);
2636 if(iter->ind.GetDegree()<
k)
2639 k=iter->ind.GetDegree();
2641 #ifdef NO_TWICE_FALL
2642 P.push_back(invconv<polyalp>(*iter));
2648 tmpres.erase(tmpres.begin(),tmpres.end());
2649 res.erase(res.begin(),res.end());
2652 for(
typename typPk::iterator iterres=res.begin()
2653 ;iterres!=res.end();iterres++)
2655 for(
typename typPk::iterator iterredspol=redspol.begin();
2656 iterredspol!=redspol.end();iterredspol++)
2657 if(iterres->nf==iterredspol->nf)
2659 redspol.erase(iterredspol);
2665 iter->ind=choice(*iter,b);
2695 *iter/=iter->ind.GetCoeff();
2696 iter->ind*=(coeff)1/iter->ind.GetCoeff();
2697 iter->nf[
mon2int(iter->ind)]=0;
2711 tmpres.push_back(*iter);
2716 for(
typename typPk::iterator iterPk=Pk.begin();iterPk!=Pk.end();iterPk++)
2717 if((
mon2int(iter->ind)<iterPk->size)&&
2718 (iterPk->nf[
mon2int(iter->ind)]!=(coeff)0))
2723 coeff tmpcoeff=iterPk->nf[
mon2int(iter->ind)];
2725 my_plus(*iterPk,*iter,tmpcoeff);
2726 iterPk->nf[
mon2int(iter->ind)]=0;
2732 typename typPk::iterator iterredspol=iter;
2734 for(;iterredspol!=res.end();iterredspol++)
2738 if(
mon2int(iter->ind)<iterredspol->size &&
2739 iterredspol->nf[
mon2int(iter->ind)]!=(coeff)0)
2741 coeff tmpcoeff=iterredspol->nf[
mon2int(iter->ind)];
2742 my_plus(*iterredspol,*iter,tmpcoeff);
2743 iterredspol->nf[
mon2int(iter->ind)]=0;
2749 for(iterredspol=tmpres.begin();iterredspol!=tmpres.end();iterredspol++)
2753 if(
mon2int(iter->ind)<iterredspol->size &&
2754 iterredspol->nf[
mon2int(iter->ind)]!=(coeff)0)
2756 coeff tmpcoeff=iterredspol->nf[
mon2int(iter->ind)];
2757 my_plus(*iterredspol,*iter,tmpcoeff);
2758 iterredspol->nf[
mon2int(iter->ind)]=0;
2768 mon *tmp=(mon*)MAC_REV_MALLOC<mon>(iterb->taille1*
sizeof(mon));
2769 for(
int i=0;
i<iterb->taille1;
i++)
2771 tmp[tmptaille1++]=iterb->accept[
i];
2772 tmp=(mon*)MAC_REV_REALLOC<mon>(tmp,iterb->taille1*
sizeof(
mon)
2773 ,tmptaille1*
sizeof(mon));
2774 MAC_REV_FREE<mon>(iterb->accept,iterb->taille1*
sizeof(
mon));
2776 iterb->taille1=tmptaille1;
2777 if(iterb->taille1==0)
2779 MAC_REV_FREE<mon>(iterb->refuse,iterb->taille2*
sizeof(
mon));
2783 iterb->refuse=(mon*)MAC_REV_REALLOC<mon>
2784 (iterb->refuse,(iterb->taille2)*
sizeof(
mon),
2785 (iterb->taille2+1)*
sizeof(
mon));
2786 iterb->refuse[iterb->taille2]=iter->ind;
2788 iterb->refuse[iterb->taille2].SetCoeff(1);
2796 for (
typename typPk::iterator iterpk=Pk.begin();iterpk!=Pk.end();iterpk++)
2800 if (
IsinB(iterpk->ind,b))
2804 iterb->refuse=(mon*)MAC_REV_REALLOC<mon>
2805 (iterb->refuse,(iterb->taille2)*
sizeof(
mon),
2806 (iterb->taille2+1)*
sizeof(
mon));
2807 iterb->refuse[iterb->taille2]=iterpk->ind;
2808 iterb->refuse[iterb->taille2].SetCoeff(1);
2813 #ifdef NO_TWICE_FALL_CHOICE
2814 for(
typename typPk::iterator iter=tmpres.begin();iter!=tmpres.end();iter++)
2815 P.push_back(invconv<polyalp>(*iter));
2823 template<
typename typPk>
2827 for(
typename typPk::iterator iter=redspol.begin();
2828 iter!=redspol.end();iter++)
2831 MAC_REV_FREE<typename typPk::value_type::coeff_t>(iter->nf,iter->size*
sizeof(
typename typPk::value_type::coeff_t));
2835 template<
typename typMk>
2838 Spoldejavu.erase(Spoldejavu.begin(),Spoldejavu.end());
2839 for(
typename typMk::const_iterator iter1=Mk.begin();iter1!=Mk.end();
2841 for(
typename typMk::const_iterator iter2=iter1;iter2!=Mk.end();
2844 typename typMk::value_type tmp=
lcm(*iter1,*iter2);
2845 if (tmp.GetDegree()==iter1->GetDegree()+1)
2846 Spoldejavu.push_back(tmp);
2850 template<
typename typP,
typename typPk,
typename typdump,
typename Base
2851 ,
template<
typename T>
class tmptypmat >
2852 void algo(typP P,typdump &dump,Base &b)
2855 typedef list<typename typPk::value_type::monom_t> typMk;
2856 typedef typename typMk::value_type
mon;
2864 typedef tmptypmat<typename typP::value_type::coeff_t> typMat;
2866 int nouveaumon,allpolused=0,maxdeg,
k,*pr,*pc;
2868 init_algo<typMat>(P,nouveaumon,maxdeg,
k,Pk,Mk,b,dump);
2872 cout<<
"je m'arrete a ce degre "<<go_on<<endl;
2873 while((nouveaumon||(k<=maxdeg))&& ((go_on>=k)||(k<=maxdeg)))
2875 while((nouveaumon||(k<=maxdeg)))
2895 cout<<
"poly a la fin de la boulcle de l'algo"<<endl;
2896 for(
typename typPk::iterator iter=Pk.begin();iter!=Pk.end();iter++)
2898 cout<<invconv<typename typP::value_type>(*iter)<<endl;
2909 cout<<
"S.back().ind.GetCoeff().rep "<<S.back().ind.GetCoeff().rep<<
" k "<<k<<endl;
2910 if((S.back().ind.GetCoeff().rep<
k) && (k>=maxdeg))
2922 if(killspol) S.erase(S.begin(),S.end());
2923 if (k+1>=maxdeg) allpolused=1;
2924 if(Mk.size()==0) nouveaumon=0;
2939 Solve(Mat,Pk,&pr,&pc);
2948 typename typMk::iterator itermon=Mk.begin();
2949 typename typPk::iterator iter;
2950 for(iter=Pk.begin();
2951 itermon!=Mk.end();iter++,itermon++,j++)
2956 iter->ind=*itermon*(iter->ind.GetCoeff());
2982 if ((
unsigned)my_rank(Mat)==Mk.size())
2985 typPk redspol,secd=secondmembre(Mat,Pk);;
2988 cout<<
"matrice de rang plein "<<endl;
2997 if(redspol.size()==0)
3010 cout<<
"redspol.size() "<<redspol.size()<<endl;
3036 cout<<
"go on ici vaut "<<go_on<<endl;
3045 cout<<
"matrice de rang pas plein "<<endl;
3047 AddB(Mat,Pk,Mk,dump,b);
3051 secd=secondmembre(Mat,Pk);
3067 if(redspol.size()==0)
3077 cout<<
"go on ici vaut "<<go_on<<endl;
3095 cout<<
"il ya un passage par mat rang pas"
3096 <<
"plein et pol non zero"<<endl;
3108 cout<<
"go on ici vaut "<<go_on<<endl;
3170 cout<<
"go on ici vaut "<<go_on<<endl;
3186 for(
int i=0;
i<p->taille1;
i++)
3188 cout<<
"p.accept[i] "<<p->accept[
i]<<endl;
3190 for(
int i=0;
i<p->taille2;
i++)
3192 cout<<
"p.refuse[i] "<<p->refuse[
i]<<endl;
3196 cout<<
"sortie d'algo flash"<<endl;
void Setnbvars(const typP &tmpPk, Base &b)
Definition: corealgo.hpp:204
void init_algo(typP &P, int &nouveaumon, int &maxdeg, int &k, typPk &Pk, typMk &Mk, Base &b, typdump &dump)
Definition: corealgo.hpp:293
void remiseenforme(typpol &p)
Definition: ugly.hpp:2
void my_plus2(pol &res1, pol &res2, const pol &nf, const coeff &toto1, const coeff &toto2)
Definition: corealgo.hpp:377
int minmaxdegP(typP P, int &maxdeg)
Definition: corealgo.hpp:184
void putingoodshape(const typP &P, typPk &workvect, const typMk &tmpMk, typexceed &exceed, typsize &sizeex, const typdump &dump, const Base &b)
Definition: corealgo.hpp:1402
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
MSKCONST char int int compress
Definition: mosek.h:4502
list< polbis< mono, T > > & Solve(typmat &S, std::list< polbis< mono, T > > &TildePk, int **pr, int **pc, workspace &w)
Definition: pol2bisspecial.hpp:609
void my_plus(pol &res, const pol &nf, const coeff toto)
Definition: corealgo.hpp:543
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 myplus44(pol &res, const pol &nf, const coeff toto, const pol &nf2, const coeff toto2, const pol &nf3, const coeff toto3, const pol &nf4, const coeff toto4)
Definition: corealgo.hpp:892
void varmult(iterator iter1, iterator iter2, mon &var1, mon &var2, const Base &b)
Definition: corealgo.hpp:2064
int compute_ppcm(typppcm &ppcm, const Base &b)
Definition: corealgo.hpp:53
void Crochetchoix(const typP &P, typPk &Pk, typPk &redspol, int k, Base &b)
C GetCoeff() const
Definition: Monom.hpp:67
list< predicat >::iterator iterator
Definition: types.hpp:20
void my_merge(T &l1, const T &l2)
Definition: corealgo.hpp:35
void DoBaseMk(const typP &tmpPk, typMk &Mk, Base &b)
Definition: corealgo.hpp:215
void findcorresppol(const mon &m, const typdump &dump, pol &res)
Definition: corealgo.hpp:2031
int Ispolzero(const pol &p)
Definition: Iszero.hpp:30
typpol nf(int var, int indmon, const typdump &dump, const Base &b)
Definition: corealgo.hpp:1001
typpol mult(int i, const typpol &pol, const typdump &dump, const Base &b, mon **exce, int &exsize)
Definition: corealgo.hpp:1077
void Listedejafait(const typMk &Mk, typMk &Spoldejavu)
Definition: corealgo.hpp:2836
mon * accept
Definition: types.hpp:6
int my_ord(const mon &m1, const mon &m2)
Definition: ord.hpp:2
void NewDestroyredspol(typPk &redspol, const typPk &Pk)
Definition: corealgo.hpp:2824
int member(const typMk &tmpMk, const typename typMk::value_type mon)
Definition: corealgo.hpp:1391
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 Dump(const typPk &Pk, typdump &dump)
Definition: dump.hpp:48
T coeff_t
Definition: pol.hpp:9
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
MSKconetypee MSKrealt MSKint32t MSKint32t j
Definition: mosek.h:2421
void my_plustmp(pol &res, const pol &nf, const coeff toto)
Definition: corealgo.hpp:492
typPk Spolordsup(typPk Pk, const Base &b)
Definition: corealgo.hpp:147
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
C coeff_t
Definition: Monom.hpp:26
void OLD_ReduceSpol(typPk &S, const typdump &dump, typPk &redspol, const Base &b)
Definition: corealgo.hpp:2295
void Destroyredspol(typPk &redspol, const typPk &Pk)
Definition: corealgo.hpp:2579
MSKCONST char MSKint32t MSKint32t * index
Definition: mosek.h:2860
dynamicexp< X, E >::degree_t Degree(const dynamicexp< X, E > &t)
Definition: dynamicexp.hpp:91
iterator end()
Definition: types.hpp:30
void conv_merge(typPk &Pk, typP &P, typexceed &ex, typsize &sizeex, const Base &b)
Definition: corealgo.hpp:1297
void ReduceSpol(typPk &S, const typdump &dump, typPk &redspol, const Base &b)
Definition: corealgo.hpp:2217
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 taille2
Definition: types.hpp:7
exponent_t GetDegree() const
Definition: Monom.hpp:70
void NewCrochetchoix(typP &P, typPk &Pk, typMk &Mk, typPk &redspol, int &k, typdump &dump, Base &b, typrecall &recall)
Definition: corealgo.hpp:2594
int goodspol(const mon &m1, const mon &m2, typppcm &ppcm, const Base &b)
Definition: corealgo.hpp:108
MSKrealt * c
Definition: mosek.h:2678
Mon my_divmon(const Mon &mon, int i, const Base &b)
Definition: corealgo.hpp:1262
MSKint32t MSKint32t MSKint32t i
Definition: mosek.h:2278
int Iszero(const Scl< MPQ > &c)
Definition: Iszero.hpp:14
int GoodDir(const typmon &m, int i, const Base &b)
Definition: corealgo.hpp:1278
Monom< COEFF, dynamicexp<'x'> > Mon
Definition: solver_bb_floating.cpp:134
int indice2(int i, int j, const Base &b)
Definition: corealgo.hpp:969
mon lcm(const mon &m1, const mon &m2)
Definition: corealgo.hpp:43
int size
Definition: pol.hpp:10
int newPkMkMatrixof(typMat &mat, typPk &Pk, typP &P, typMk &Mk, int &k, Base &b, typdump &dump, typrecall &recall)
Definition: corealgo.hpp:1506
void forget(Base &b, typdump &dump, int k, typrecall &recall)
Definition: dump.hpp:75
mon * refuse
Definition: types.hpp:8
cont< pol< mon, T > > Crochet(const cont< pol< mon, T > > &P, int k)
Definition: corealgo.hpp:6
iterator begin()
Definition: types.hpp:25
list< predicat >::const_reverse_iterator const_reverse_iterator
Definition: types.hpp:23
void algo(typP P, typdump &dump, Base &b)
Definition: corealgo.hpp:2852
int stop_degree(const typB &b)
Definition: dimpos.hpp:49
predicat::monom_t mon
Definition: types.hpp:19
#define pol
Definition: pol2ter.hpp:3
void myplus22(pol &res, const pol &nf, const coeff toto, const pol &nf2, const coeff toto2)
Definition: corealgo.hpp:647
void SetCoeff(const C &c)
Definition: Monom.hpp:68
void stab(typPk &Pk)
Definition: corealgo.hpp:18
int mindeg(const typPk &l)
Definition: corealgo.hpp:2422
mon ind
Definition: pol.hpp:11
Multivariate monomials.
Definition: Monom.hpp:21
void setorder(ptrfun tmpord)
Definition: placemon.hpp:132
iterator erase(iterator first, iterator last)
Definition: types.hpp:35
T * nf
Definition: pol.hpp:12
pol halfred(const mon &targetind, const pol &p, const typdump &dump, const Base &b)
Definition: corealgo.hpp:2076
reverse_iterator rbegin()
Definition: types.hpp:27
long min(long a, long b)
Definition: workspace.hpp:3
typmat * MatrixOf(const typPk &L, const typMk &lm, const typmat &mat)
Definition: corealgo.hpp:260