<!-- Begin
var a1="<html><head>";
var a2="<title>Homeomath : Factorisation d'un polynôme connaissant une racine</title>";
var a3="</head><body background=\"images/theme.gif\" style=\"font-family: Century Gothic\">";
var a4="</body></html>";
var a51="<font color=\"#008080\" size=\"5\">";
var a52="</font>";
// auteur Arnaud Saint-Martin de www.homeomath.com
function reponse(form){for(var i=0;i<form.length;i++){if(form[i].checked){break}}var repondu=""if(i<form.length){repondu=form[i].value}return repondu;}
function affiche(form) {
// auteur Arnaud Saint-Martin de www.homeomath.com
  var P=form.P.value;
  var p=Array();
  var q=Array();
  var d=Array();
  P=P.replace(/ /g,"");
  p=polysuite(P);
  var facteur="";
  var dev="";
  var px="";
  var rac=eval(form.rac.value);
  var doc="";
  var phrase="";
  var result=pimage(p,rac);
  dev=dev+"p("+rac+") = "+result+"<br>";
  d[0]=p[1];
  d[1]=p[2];
  d[2]=p[3];
  if(p.length==4){
  if(result==0){
  if((rac!=0)&&(p[0]!=0)){
  dev=dev+"donc "+rac+" est une racine de p(x)";
  dev=dev+"<br>et p(x) peut se mettre sous la forme : <br>"
  facteur="x - "+rac;
  dev=dev+ecritpol(p)+" = ("+facteur+")(ax^2 + bx + c)<br>";
  dev=dev+"ax^3 + bx^2 + cx - "+rac+"ax^2 - "+rac+"bx - "+rac+"c = ";
  dev=dev+"<br>ax^3 + (b - "+rac+"a)x^2 + (c - "+rac+"b)x - "+rac+"c";
  dev=dev+"<br><br><u>par identification : </u>";
  dev=dev+"<br>a = "+p[3];
  dev=dev+"<br>b - "+rac+"a = "+p[2];
  dev=dev+"<br>c - "+rac+"b = "+p[1];
  dev=dev+"<br>- "+rac+"c = "+p[0];
  q[2]=p[3];
  q[1]=somme(produit(rac,p[3]),p[2]);
  q[0]=division(p[0],produit("-1",rac));
  dev=dev+"<br>On en déduit :";
  dev=dev+" a = "+q[2]+", b = "+q[1]+", c = "+q[0];
  dev=dev+"<br><br>p(x) = ("+facteur+")("+ecritpol(q)+")";
  phrase=a1+a2+a3+dev+"</body></html>";
  phrase=phrase.replace(/\^3/g,"<sup>3</sup>");
  phrase=phrase.replace(/\^2/g,"<sup>2</sup>");
  phrase=phrase.replace(/ 1a/g," a");
  phrase=phrase.replace(/ 1b/g," b");
  phrase=phrase.replace(/ 1c/g," c");
  phrase=phrase.replace(/- -/g," + ");
  document.write(phrase);
  }else{alert("Inutile d'utiliser cette méthode, puisque x est facteur commun : p(x) = x("+ecritpol(d)+")");};
 }else{alert(rac+" n'est pas racine de p(x), puisque p("+rac+") = "+result+" donc on ne peut pas utiliser cette méthode !");};
}else{alert("Ce n'est pas un polynôme du 3ème degré !");};
}
function polysuite(POL){
var POL1=POL;
var POL2=Array();
var MON=Array();
var degpol=0;
var POL1=POL.replace(/-/g,"+-");
MON=POL1.split("+");
for(var i=0;i<MON.length;i++){
POL2[deg(MON[i])]=coef(MON[i]);
};
degpol=eval(POL2.length-1);;
for(var i=0;i<=degpol;i++){if((POL2[i]=="")||(POL2[i]==null)){POL2[i]="0";};};
return POL2;
}
function deg(mon){
var degre=0;
var pos=mon.indexOf("^");
var long=mon.length;
if(pos==-1){
pos=mon.indexOf("x");
if(pos==-1){degre=0;}
else{degre=1;};
}
else{
degre=eval(mon.substring(pos+1,long));
};
return degre;
}
function coef(mon){
var coefficient="";
var mon1="";
var pos=0;
pos=mon.indexOf("x");
if(pos!=-1){mon1=mon.substring(0,pos);}else{mon1=mon;};
if(mon1==""){coefficient="1";};
if(mon1=="-"){coefficient="-1";};
if((mon1!="")&&(mon1!="-")){coefficient=mon1;};
return coefficient;
}
function somsuit(pola,polb){
var da=eval(pola.length-1);
var db=eval(polb.length-1);
var pols=Array();
if(da<db){
for(var i=0;i<=da;i++){pols[i]=somme(""+pola[i]+"",""+polb[i]+"");};
for(var i=eval(da+1);i<=db;i++){pols[i]=polb[i];};
pols.length=eval(db+"+"+1);
}
else{
for(var i=0;i<=db;i++){pols[i]=somme(""+pola[i]+"",""+polb[i]+"");};
for(var i=eval(db+1);i<=da;i++){pols[i]=pola[i];};
pols.length=eval(da+"+"+1);
};
pols=reducpol(pols);
return pols;
}
function ecritpol(pol){
var dp=eval(pol.length-1);
var polich="";
polich=""+pol[0];
for(var i=1;i<=dp;i++){
if(pol[i]!=0){
if(i!=1){polich=pol[i]+"x^"+i+" + "+polich;}else{polich=pol[i]+"x + "+polich;};};
};
polich=" "+polich;
polich=polich.replace(/\+ -/g," - ");
polich=polich.replace(/\+ 1x/g," + x");
polich=polich.replace(/\- 1x/g,"- x");
polich=polich.replace(/\ 1x\^2/g," x^2");
polich=polich.replace(/\ 1x\^3/g," x^3");
polich=polich.replace("x^0","");
return polich;
}
function entier(x){var entier=Math.round(eval(x-0.5));return entier;}
function pgcd(a,b){
  var p=0;
  var reste=b%a;
  var quot=eval(eval(b-reste)/a);
  var divis=eval(a);
  var divid=eval(b);
  var produit=eval(a*b);
  while(reste!=0){
    divid=eval(divis);
    divis=eval(reste);
    reste=divid%divis;
    quot=eval(eval(divid-reste)/divis);};
  p=divis;
  return p;
}
function videspace(chaine){
var long=0;var c="";
var ch=chaine.toString();
var k=1;var j=0;
long=chaine.length+1;
while(j<=long-1){c=ch.charAt(j);if(c==" "){k=k+1;};j=j+1;};
for(var i=1;i<=k;i++){ch=ch.replace(" ","");};
return ch;
}
function arrondi(x,choix){
var retour=eval(x*choix);
var tronc=Math.round(retour);
tronc=eval(tronc/choix);
return tronc;
}
function reduction(chaine){
var nume=numerateur(chaine);
var deno=denominateur(chaine);
var reduc="";
var pg=0;
if((nume!=0)&&(deno!=0)){
pg=Math.abs(pgcd(nume,deno));
nume=Math.round(nume/pg);
deno=Math.round(deno/pg);
if(deno<0){deno=Math.abs(deno);nume=eval(-nume);};
if(deno==1){reduc=nume;}else{reduc=nume+"/"+deno;};
};
if(deno==0){reduc="Erreur !";};
if((nume==0)&&(deno!=0)){reduc="0";};
return reduc;
}
function decimal(den){
var de=den;
var deci=true;
var div2=eval(de%2==0);
var div5=eval(de%5==0);
while(div2){de=Math.round(de/2);div2=eval(de%2==0);};
while(div5){de=Math.round(de/5);div5=eval(de%5==0);};
if(de!=1){deci=false;};
return deci;
}
function numerateur(chaine){
var ch=chaine.toString();
var pos=ch.indexOf("/");
var num="";
if(pos!=-1){num=eval(ch.substring(0,pos));}else{num=ch.replace(".","");};
return num;
}
function denominateur(chaine){
var ch=chaine.toString();
var pos=ch.indexOf("/");
var long=ch.length;
var den="";
if(pos!=-1){den=ch.substring(pos+1,long);}
else{
pos=ch.indexOf(".");
if(pos!=-1){den=Math.pow(10,eval(long-pos-1));}else{den=1;};};
return den;
}
function produit(fraca,fracb){
var numa=numerateur(fraca);
var numb=numerateur(fracb);
var dena=denominateur(fraca);
var denb=denominateur(fracb);
var fracp="";
var nump=eval(numa*numb);
var denp=eval(dena*denb);
if(denp<0){denp=Math.abs(denp);nump=eval(-nump);};
fracp=nump+"/"+denp;
fracp=reduction(fracp);
return fracp;
}
function somme(fraca,fracb){
var numa=numerateur(fraca);
var numb=numerateur(fracb);
var dena=denominateur(fraca);
var denb=denominateur(fracb);
var fracs="";
var nums=eval(numa*denb+numb*dena);
var dens=eval(dena*denb);
if(dens<0){dens=Math.abs(dens);nums=eval(-nums);};
fracs=nums+"/"+dens;
fracs=reduction(fracs);
return fracs;
}
function division(fraca,fracb){
var numa=numerateur(fraca);
var numb=numerateur(fracb);
var dena=denominateur(fraca);
var denb=denominateur(fracb);
var fracp="";
var nump=eval(numa*denb);
var denp=eval(dena*numb);
if(denp<0){denp=Math.abs(denp);nump=eval(-nump);};
fracp=nump+"/"+denp;
fracp=reduction(fracp);
return fracp;
}
function puissance(frac,p){
var pu="1";
for(var i=1;i<=p;i++){pu=produit(frac,pu);};
return pu;
}
function derivee(pol){
var dp=eval(pol.length-1);
var pold=Array();
for(var i=0;i<=dp;i++){pold[i]=produit(pol[i],""+i+"");};
for(var i=0;i<=dp;i++){pold[i]=pold[i+1];};
if(dp==0){pold[0]="0";dp=1;};
pold.length=eval(dp);
return pold;
}
function pimage(pol,a){
var dp=eval(pol.length-1);
var puis="";
var som=pol[0];
for(var i=1;i<=dp;i++){puis=puissance(a,i);puis=produit(puis,pol[i]);som=somme(som,puis);};
return som;
}
function puisuit(pol,k){
var ins=Array();
ins=polysuite("1");
for(var i=1;i<=k;i++){ins=prodsuit(ins,pol);};
return ins;
}
function compose(pol1,pol2){
var comp=Array();
var terme=Array();
var coeffi=Array();
var dp1=eval(pol1.length-1);
comp=polysuite(""+pol1[0]+"");
for(var i=1;i<=dp1;i++){
terme=puisuit(pol2,i);
coeffi=polysuite(""+pol1[i]+"");
terme=prodsuit(terme,coeffi);
comp=somsuit(comp,terme);
};
return comp;
}
function deriveen(pol,n){
var poldd=Array();
poldd=pol;
for(var i=1;i<=n;i++){poldd=derivee(poldd);};
return poldd;
}
function divsuit(pol1,pol2,option){
var deg1=eval(pol1.length-1);
var deg2=eval(pol2.length-1);
var degq=eval(deg1-deg2);
var degr=deg1;
var qu=Array();
var sous=Array();
var reste=Array();
var monome="";
if(deg2!=0){
if(degq>=0){
monome=division(pol1[deg1],pol2[deg2]);
qu[degq]=monome;
for(var i=0;i<degq;i++){qu[i]="0";sous[i]="0";};
reste=pol1;
while(degr>=deg2){
 for(var i=0;i<=deg2;i++){sous[i+degq]=produit(monome,pol2[i]);};
 reste=diffsuit(reste,sous);
 degr=eval(reste.length-1);
 degq=eval(degr-deg2);
 monome=division(reste[degr],pol2[deg2]);
 qu[degq]=monome;
 sous.length=0;
 for(var i=0;i<=degq;i++){sous[i]="0";};
};
}else{qu[0]="0";reste=pol1;};
}
else{
if(pol2[deg2]!="0"){
for(var i=0;i<=deg1;i++){qu[i]=division(pol1[i],pol2[deg2]);};
reste=polysuite("0");
}else{alert("Division par 0 !");};
};
if(option==1){return qu;}else{return reste;};
}
function reducpol(pol){
var poltab=Array();
var poltexte="";
poltexte=ecritpol(pol);
poltab=polysuite(poltexte);
return poltab;
}
