next up previous contents index
suivant: Autre version du programme monter: Savoir si le polynôme précédent: Savoir si le polynôme   Table des matières   Index

Programmation de la fonction booléenne estdivpoly

On va écrire la fonction récursive estdivpoly qui a comme arguments, deux polynômes A et B écrits sous forme symbolique et qui renverra 1 si A est divisible par B et 0 sinon.
On rappelle que degree(A) renvoie le degré de A et que valuation(A) renvoie la valuation de A (la plus petite puissance de A).

Pour Savoir si A est divisible par B, on s'interesse aux termes de plus haut degré et de plus bas degré de A et B : c'est à dire qu'a chaque étape on essaye de faire la division par les 2 bouts ....
Par exemple si :
A=x^3+2*x-3 et B=x^2+x on sait que A n'est pas divisible par B car -3 n'est pas divisible par x,
ou encore si :
A=x^3+2*x^2 et B=x^2+1 on sait que A n'est pas divisible par B car le quotient aurait pour degré 3-2=1 et pour valuation 2-0=2, ce qui est impossible 1<2 (le degré n'peut pas être inférieur à la valuation.

estdivpoly(A,B):={
  local da,db,va,vb,dq,vq,dva,dvb,dvq,Q,Ca,Cb;
  da:=degree(A);
  va:=valuation(A);
  dva:=da-va;
  db:=degree(B);
  vb:=valuation(B);
  dvb:=db-vb;
  if (A==0) then return 1;end_if;
  if ((da<db) or (va<vb)) then return 0;end_if;
  if ((dva==0) and (dvb>0)) then return 0;end_if;
  if ((dva>=0) and (dvb==0)) then return 1;end_if;
  Cb:=coeffs(B);
  if ((dva>0) and (dvb>0)) then 
  dq:=da-db;
  vq:=va-vb;
  dvq:=dq-vq;
  if (dvq<0) then return 0;end_if;
  Ca:=coeffs(A); 
  Q:=Ca[0]/Cb[0]*x^(dq);
  if (dvq==0) then 
  A:=normal(A-B*Q);
  else
  Q:=Q+Ca[dva]/Cb[dvb]*x^(vq);  
  A:=normal(A-B*Q);
  end_if;
  da:=degree(A);
  va:=valuation(A);
   end_if;
  return estdivpoly(A,B);
};
On tape : A:=normal((x^4-x^3+x^2-1)*(x^5-x^3+x^2-1)
puis,
estdivpoly(A,x^4-x^3+x^2-1)
On obtient :
1
next up previous contents index
suivant: Autre version du programme monter: Savoir si le polynôme précédent: Savoir si le polynôme   Table des matières   Index
Documentation de giac écrite par Renée De Graeve