Sans utiliser de fonctions d'affacturage / polynôme intégrées, factorisez complètement un polynôme en irréductibles sur les entiers ou un champ fini.
Contribution
Votre programme / fonction recevra un nombre premier (ou zéro) n
en entrée. Le champ / anneau est le champ fini de cet ordre (c'est-à-dire Z/nZ
), ou juste Z
s'il l' n
est 0
. Votre programme peut échouer s'il n
ne l'est pas 0
ou s'il s'agit d' un programme principal. Le polynôme sera en F[x]
.
Votre programme / fonction recevra également le polynôme en entrée.
Il y a une certaine flexibilité dans l'entrée, assurez-vous de spécifier comment vous avez l'intention de recevoir l'entrée. Par exemple, le polynôme peut être entré sous forme de liste de coefficients, ou sous la forme que la plupart des gens attendent (ex:) 50x^3 + x^2
, ou sous une autre forme raisonnable. Ou le format de saisie du champ / anneau peut également être différent.
Production
Votre programme / fonction affichera le polynôme factorisé complètement. Vous pouvez laisser plusieurs racines étendues (c'est- (x + 1)(x + 1)
à- dire au lieu de (x + 1)^2
). Vous pouvez supprimer les espaces entre les opérateurs binaires. Vous pouvez remplacer la juxtaposition par *
. Vous pouvez insérer des espaces dans des endroits étranges. Vous pouvez réorganiser les facteurs dans l'ordre que vous souhaitez. Le x
terme pourrait bien être (x)
. x
peut être écrit comme x^1
; cependant, le terme constant peut ne pas avoir x^0
. Les +
signes étrangers sont autorisés. Vous ne pouvez pas avoir un terme avec un 0
devant, ils doivent être laissés de côté. Le terme principal de chaque facteur doit être positif, les signes négatifs doivent être extérieurs.
Cas de test, votre programme devrait être en mesure de produire une sortie pour chacun d'eux dans un délai raisonnable (disons <= 2 heures):
Contribution: 2, x^3 + x^2 + x + 1
Production: (x + 1)^3
Contribution: 0, x^3 + x^2 + x + 1
Production: (x + 1)(x^2 + 1)
Contribution: 0, 6x^4 – 11x^3 + 8x^2 – 33x – 30
Production: (3x + 2)(2x - 5)(x^2 + 3)
Contribution: 5, x^4 + 4x^3 + 4x^2 + x
Production: x(x + 4)(x + 4)(x + 1)
Contribution: 0, x^5 + 5x^3 + x^2 + 4x + 1
Production: (x^3 + 4x + 1)(x^2 + 1)
Un merci spécial à Peter Taylor pour avoir critiqué mes cas de test
p
a les éléments {0, 1, ... , p-1}
et il est sous mod d'addition / multiplication p
. Fondamentalement, réduisez n'importe quel coefficient par mod p
et vous êtes bon. Notez également que s'il a une racine, c'est-à-dire un facteur linéaire, l'un des {0, ... , p-1}
produira 0
(mod p
) lorsqu'il sera branché sur le polynôme.
Z
consiste à prendre en Z/pZ
compte un p
ascenseur approprié , puis Hensel. Cependant, l'approche golfable est probablement (et c'est certainement la voie que je regarde) d'utiliser une simple limite sur la hauteur des facteurs et de la forcer brutalement.