Racines entières d'un polynôme

10

Quel algorithme pouvons-nous utiliser pour trouver toutes les racines entières d'un polynôme avec des coefficients entiers?f(x)

J'observe que Sage peut trouver les racines en quelques secondes même lorsque tous les coefficients de sont très grands. Comment est-il capable de faire cela?f(x)

user12290
la source
1
Cherchez-vous un algorithme pour retourner une racine entière d'un polynôme donné? Si oui, c'est indécidable et la question est hors sujet ici. Vous pouvez le poser sur l' informatique qui a une portée plus large.
Kaveh
7
Attendez. Pourquoi l'indécidabilité rend la question hors sujet? Il s'agit d'une question légitime au niveau de la recherche.
Jeffε
2
Alors, comment fait Sage? Être indécidable - même s'il est bien connu qu'il est indécidable - ne rend pas le problème théoriquement inintéressant. Les informaticiens théoriques résolvent tout le temps des problèmes indécidables - voir, par exemple, toute la vérification assistée par ordinateur.
Jeffε
11
Kaveh, ce que vous dites n'est pas vrai. Ce qui est indécidable est la solvabilité des équations diophantiennes avec de nombreuses variables (de sorte qu'il existe facilement une infinité de solutions réelles et que l'on recherche une entière / rationnelle). Mais cette question concerne un polynôme univarié , qui est bien sûr décidable (si est de degré , il y a jusqu'à racines et on peut vérifier lequel est un entier). f ( x ) d df(x)f(x)dd
Mahdi Cheraghchi
1
@Pratik Vous n'avez pas besoin de bases Gröbner dans le cas univarié.
Yuval Filmus

Réponses:

10

En supposant que les coefficients de sont des entiers ou des rationnels et que vous voulez des racines entières, l'approche la plus simple est d'utiliser le théorème de la racine entière ou rationnelle. Voir http://en.wikipedia.org/wiki/Rational_root_theorem Comme indiqué par DW, cela pourrait être problématique si le coefficient constant est difficile à factoriser (voir aussi /math/123018/polynomial- et-entier-racines )f

Dans tous les cas, la documentation de Sage explique clairement comment ils effectuent la recherche racine: "La méthode suivante, qui est utilisée si K est un domaine intégral, est d'essayer de factoriser le polynôme. Si cela réussit, alors pour chaque degré un facteur a * x + b, nous ajoutons -b / a en tant que racine (tant que ce quotient est réellement dans l'anneau souhaité). " Voir http://www.sagemath.org/doc/reference/polynomial_rings/sage/rings/polynomial/polynomial_element.html .

Votre question devient alors: Comment factorisent-ils efficacement les polynômes avec des coefficients entiers? Apparemment, Sage appelle NTL pour ce faire (voir http://www.shoup.net/ntl/doc/ZZXFactoring.txt pour les détails NTL).

Si vous voulez une méthode efficace asymptotiquement, vous pouvez vous référer à la méthode de Lenstra, Lenstra et Lovasz ( https://openaccess.leidenuniv.nl/handle/1887/3810 ).

minar
la source
1
Merci pour l'astuce utile! Fascinant. Pourriez-vous être prêt à modifier votre réponse pour élaborer sur la façon de transformer cela en un algorithme, et quel est son temps d'exécution? Le temps d'exécution le plus défavorable est-il exponentiel (car il peut falloir du temps sous-exponentiel pour factoriser, et il peut alors y avoir de manière exponentielle de nombreux diviseurs du coefficient de début et de fin)? Si oui, existe-t-il de meilleurs algorithmes, ou s'agit-il de la meilleure solution possible? De plus, cette approche ne trouve-t-elle pas seulement les racines rationnelles, mais pas les racines irrationnelles?
DW
En relisant la question et en voyant que vous l'interprétez différemment, je ne suis plus tout à fait sûr, mais il me semblait clair et pour certains commentateurs que la question posait des racines entières. Ne le lisez-vous pas ainsi?
minar
@minar, vous avez raison. Maintenant que j'ai relu la question, cela semble être le cas. J'ai dû lire la question trop rapidement. (J'ai initialement mal interprété la question comme impliquant que nous voulions toutes les racines d'un polynôme à coefficients entiers, mais en relisant la question, cela semble être une mauvaise interprétation.)
DW
2
Pour une méthode asymptotiquement et pratiquement efficace, l'algorithme le plus connu est de van Hoeij (voir ici ). En fait, NTL semble l'utiliser.
Bruno