Senza utilizzare alcuna funzione di factoring / polinomio incorporata, fattore un polinomio completamente in irriducibili sopra gli interi o un campo finito.
Ingresso
Il tuo programma / funzione riceverà un numero primo (o zero) n
come input. Il campo / anello è il campo finito di quell'ordine (cioè Z/nZ
), o semplicemente Z
se lo n
è 0
. Il tuo programma potrebbe fallire se n
non lo è 0
o è un numero primo. Il polinomio sarà presente F[x]
.
Il tuo programma / funzione riceverà anche il polinomio come input.
C'è una certa flessibilità nell'input, assicurati di specificare come intendi ricevere l'input. Ad esempio, il polinomio potrebbe essere inserito come un elenco di coefficienti o nella forma che la maggior parte delle persone si aspetta (es:) 50x^3 + x^2
o in qualche altra forma ragionevole. Oppure il formato di inserimento del campo / anello potrebbe anche essere diverso.
Produzione
Il tuo programma / funzione produrrà il polinomio fattorizzato completamente. È possibile lasciare più radici espanse (ovvero (x + 1)(x + 1)
anziché (x + 1)^2
). È possibile rimuovere spazi bianchi tra operatori binari. È possibile sostituire la giustapposizione con *
. È possibile inserire spazi bianchi in posti strani. È possibile riordinare i fattori nell'ordine desiderato. Il x
termine potrebbe essere (x)
. x
può essere scritto come x^1
; tuttavia il termine costante potrebbe non avere x^0
. +
Sono ammessi segni estranei . Potresti non avere un termine con un 0
davanti, devono essere esclusi. Il termine principale di ciascun fattore deve essere positivo, i segni negativi devono essere al di fuori.
Casi di test, il tuo programma dovrebbe essere in grado di produrre output per ciascuno di questi in tempi ragionevoli (diciamo <= 2 ore):
Ingresso: 2, x^3 + x^2 + x + 1
Produzione: (x + 1)^3
Ingresso: 0, x^3 + x^2 + x + 1
Produzione: (x + 1)(x^2 + 1)
Ingresso: 0, 6x^4 – 11x^3 + 8x^2 – 33x – 30
Produzione: (3x + 2)(2x - 5)(x^2 + 3)
Ingresso: 5, x^4 + 4x^3 + 4x^2 + x
Produzione: x(x + 4)(x + 4)(x + 1)
Ingresso: 0, x^5 + 5x^3 + x^2 + 4x + 1
Produzione: (x^3 + 4x + 1)(x^2 + 1)
Un ringraziamento speciale a Peter Taylor per aver criticato i miei casi di test
p
ha gli elementi {0, 1, ... , p-1}
ed è in mod aggiunta / moltiplicazione p
. Fondamentalmente, riduci qualsiasi coefficiente di mod p
e sei a posto. Inoltre, nota che se ha una radice, cioè un fattore lineare, uno di {0, ... , p-1}
produrrà 0
(mod p
) quando è collegato al polinomio.
Z
è di fattorizzare Z/pZ
un p
ascensore adatto e quindi Hensel. Tuttavia, l'approccio golfistico è probabilmente (e questo è certamente il percorso che sto guardando) per usare un semplice limite sull'altezza dei fattori e forzarlo bruto.