12.07.2015 Views

Algorithmes de calcul formel - Free

Algorithmes de calcul formel - Free

Algorithmes de calcul formel - Free

SHOW MORE
SHOW LESS
  • No tags were found...

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

et lcoeff X1 (P 0 + P 1 ) + O(2) = lcoeff X1 (Q 0 + Q 1 ) + O(2) = lcoeff X1 (F). Ontronque ensuite P 1 et Q 1 en ne conservant que les termes <strong>de</strong> <strong>de</strong>gré 1 par rapport àX 2 , . . .., X n .On trouve <strong>de</strong> la même manière par récurrence P k et Q k homogènes <strong>de</strong> <strong>de</strong>gré kpar rapport à X 2 , . . .., X k , <strong>de</strong> <strong>de</strong>gré par rapport à X 1 respectivement inférieur aux<strong>de</strong>grés <strong>de</strong> Q 0 et <strong>de</strong> P 0 et tels queF lcoeff(F) = (P 0 + . . .. + P k )(Q 0 + . . .. + Q k ) + O(k + 1) (6)et lcoeff(F) = lcoeff X1 (P 0 + . . . . + P k ) + O(k + 1) = lcoeff X1 (Q 0 + . . .. +Q k ) + O(k + 1).Si on est bien en un point <strong>de</strong> bonne évaluation et si k est plus grand que le<strong>de</strong>gré total (par rapport aux variables X 2 , . . .., X n ) du polynôme F lcoeff(F) onva vérifier que P 0 + . . .. + P k = D lcoeff(F) . En effet, si on a <strong>de</strong>ux suites <strong>de</strong>lcoeff(D)polynômes P et P ′ et Q et Q ′ satisfaisant (6) avec les même termes <strong>de</strong> <strong>de</strong>gré zéroP 0 et Q 0 , alors en prenant la différence, on obtient :(P 0 +P 1 . . .+P k )(Q 0 +Q 1 . . .+Q k ) = (P 0 +P ′ 1 . . .+P ′ k )(Q 0+Q ′ 1 . . .+Q ′ k )+O(k+1)On égale alors les termes homogènes <strong>de</strong> <strong>de</strong>gré j, pour j = 1, on obtient P 0 (Q 1 −Q ′ 1 ) = Q 0(P 1 −P 1 ′), donc Q 0 divise Q 1 −Q ′ 1 qui est <strong>de</strong> <strong>de</strong>gré strictement inférieurau <strong>de</strong>gré <strong>de</strong> Q 0 par rapport à X 1 (car on a l’inégalité large et les termes <strong>de</strong> plus haut<strong>de</strong>gré sont égaux), donc Q 1 = Q ′ 1 et P 1 = P 1 ′ . On montre <strong>de</strong> la même manière queQ j = Q ′ j et P j = P j ′ . L’écriture est donc unique, c’est donc l’écriture en polynômehomogène <strong>de</strong> <strong>de</strong>gré croissant <strong>de</strong> D lcoeff(F) que l’on reconstruit.lcoeff(D)Cet algorithme permet donc <strong>de</strong> reconstruire D, il suffit <strong>de</strong> tester à chaqueétape si P 0 + . . .. + P k divise F lcoeff(F). On appelle cette métho<strong>de</strong> <strong>de</strong> remontéelemme <strong>de</strong> Hensel linéaire. Il existe une variante dite lemme <strong>de</strong> Hensel quadratiquequi consiste à passer <strong>de</strong> O(k) à O(2k). Elle nécessite toutefois un <strong>calcul</strong>supplémentaire, celui <strong>de</strong> l’i<strong>de</strong>ntité <strong>de</strong> Bézout à O(2k) près pour les polynômesP 0 + . . .. + P k−1 et Q 0 + . . .. + Q k−1 . Ce <strong>calcul</strong> se fait également par lifting.Algorithme EZGCD (Hensel linéaire)Arguments : 2 polynômes F et G à coefficients entiers et primitifs. Renvoie lepgcd <strong>de</strong> F et G ou false.1. Evaluer F et G en (X 2 , . . .., X n ) = (0, . . ..,0), vérifier que les coefficientsdominants <strong>de</strong> F et <strong>de</strong> G ne s’annulent pas. Calculer le pgcd D b <strong>de</strong> F(0) et<strong>de</strong> G(0). Prendre un autre point d’évaluation au hasard qui n’annule pas lescoefficients dominants <strong>de</strong> F et <strong>de</strong> G et vérifier que le pgcd a le même <strong>de</strong>gréque D b . Sinon, renvoyer false (on peut aussi faire une translation d’origine <strong>de</strong>F et <strong>de</strong> G en un autre point mais cela diminue l’efficacité <strong>de</strong> l’algorithme).2. On note lcF et lcG les coefficients dominants <strong>de</strong> F et <strong>de</strong> G par rapport à X 1 .3. Si <strong>de</strong>gre(F) <strong>de</strong>gre(G) et <strong>de</strong>gre(D b ) = <strong>de</strong>gre(G) et F divise G renvoyerF4. Si <strong>de</strong>gre(G) < <strong>de</strong>gre(F) et <strong>de</strong>gre(D b ) = <strong>de</strong>gre(F) et G divise F renvoyerG5. Si <strong>de</strong>gre(F) = <strong>de</strong>gre(D b ) ou si <strong>de</strong>gre(G) = <strong>de</strong>gre(D b ) renvoyer false33

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!