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) ncome input. Il campo / anello è il campo finito di quell'ordine (cioè Z/nZ), o semplicemente Zse lo nè 0. Il tuo programma potrebbe fallire se nnon lo è 0o è 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^2o 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 xtermine potrebbe essere (x). xpuò 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 0davanti, 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
pha gli elementi {0, 1, ... , p-1}ed è in mod aggiunta / moltiplicazione p. Fondamentalmente, riduci qualsiasi coefficiente di mod pe 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/pZun pascensore 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.