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)
^
4-x^
3+x^
2-1)