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.

Il existe différentes métho<strong>de</strong>s qui améliorent la complexité <strong>de</strong> cette étape :– La recherche <strong>de</strong>s <strong>de</strong>gré possibles <strong>de</strong> facteurs fondée sur la factorisation en<strong>de</strong>grés distincts pour différents nombres premiers permet d’éviter <strong>de</strong>s tests<strong>de</strong> division si une combinaison <strong>de</strong> facteurs est d’un <strong>de</strong>gré exclu par la factorisationpour d’autres nombres premiers.– Le test <strong>de</strong> divisibilité du coefficient dominant ou du coefficient constant permetaussi d’éviter <strong>de</strong>s divisions complètes <strong>de</strong> polynômes.Mais ces astuces n’évitent pas l’énumération <strong>de</strong> toutes les combinaisons possibles<strong>de</strong> facteurs et donc la complexité exponentielle. Lorsque les combinaisons d’unpetit nombre <strong>de</strong> facteurs (par exemple 3) échouent, les systèmes récents utilisentl’algorithme knapsack <strong>de</strong> Van Hoeij basé sur l’algorithme LLL (recherche <strong>de</strong> based’un réseau ayant <strong>de</strong>s vecteurs <strong>de</strong> petite norme) qui permet d’eliminer complètementcette complexité exponentielle.Exemple :Toujours le même exemple, il nous restait <strong>de</strong>ux facteurs dans Z/125Z, le facteurx 3 + x + 1 ayant été détecté comme un facteur <strong>de</strong> P = x 7 + x 5 + x 3 − x 2 + 1dans Z. On teste chacun <strong>de</strong>s facteurs a 2 = x − 37 et c 2 = x 3 + 37x 2 − 6 ∗ x + 27séparément, sans succès. On les multiplie alors modulo 125, ce qui donne x 4 −x + 1 en représentation symétrique qui est bien un facteur <strong>de</strong> P (donc un facteurirréductible).8.3 Factorisation à plusieurs variablesComme pour le PGCD en plusieurs variables, on se ramène d’abord en unevariable, en général on évalue toutes les variables sauf celle correspondant au <strong>de</strong>grépartiel le plus faible. On factorise ensuite en une variable puis on remonte. Achaque étape <strong>de</strong> remontée, il peut être à nouveau nécessaire <strong>de</strong> combiner plusieursfacteurs. Différentes stratégies existent, comme pour le PGCD : factorisarion heuristique(avec reconstruction z-adique), remontée variable par variable ou toutes lesvariables en même temps comme dans EZGCD. On va présenter ici plus en détailsl’algorithme <strong>de</strong> factorisation heuristique.Soit P un polynôme en X 1 , ..., X n à coefficients entiers avec n > 1, on choisitune <strong>de</strong>s variables par exemple X n , qu’on notera X dans la suite. On considèreP comme un polynôme en X 1 , ..., X n−1 à coefficients dans Z[X]. On supposeque P est primitif (quitte à extraire son contenu qui est dans Z[X]). On <strong>calcul</strong>eensuite P(z) pour un entier z tel que 8 |z| ≥ 2|P | + 2. On factorise P(z) dansZ[X 1 , ..., X n−1 ] :P(z)(X 1 , ..., X n−1 ) = c(z)Π k j=1p j (X 1 , ..., X n−1 ) (12)où c est le contenu du polynôme P(z) (comme polynôme en n − 1 variables àcoefficients entiers). Il s’agit <strong>de</strong> reconstruire les facteurs <strong>de</strong> P à partir <strong>de</strong>s p j et <strong>de</strong>c. Deux problèmes se posent alors, celui <strong>de</strong> la recombinaison possible <strong>de</strong> plusieursfacteurs p j pour obtenir un facteur irréductible <strong>de</strong> P , et l’existence d’un facteurentier du contenu c à combiner avec un ou plusieurs p j pour obtenir ce facteurirréductible. Plus précisément, si P k est un facteur irréductible <strong>de</strong> P , on a :P k (z) = d(z)Π certains jp j , où d(z) divise c(z) (13)8 Ici |P | désigne le plus grand coefficient <strong>de</strong> P en valeur absolue56

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

Saved successfully!

Ooh no, something went wrong!