La seguente risposta è stata originariamente pubblicata come commento sul blog di Gil
(1) Sia un campo numerico, dove assumiamo che α abbia un polinomio minimo monico f ∈ Z [ x ] . Si possono quindi rappresentare elementi dell'anello di numeri interi O K come polinomi in α o in termini di una base integrale - i due sono equivalenti.K=Q(α)αf∈Z[x]OKα
Ora il fissaggio come in (1) c'è una riduzione del tempo polinomiale dal problema sopra K al problema in Q . Per verificare che i calcoli (ad es. Intersecare un ideale con Z o fattorizzare una mod polinomiale p ) possano essere eseguiti in tempo polinomiale, consultare il libro di Cohen a cui si fa riferimento nella risposta precedente.KKQZp
Come precomputazione per ogni primo razionale divide il discriminante di α (cioè il discriminante di f ) trova tutti i numeri primi di O K che giacciono sopra p .pαfOKp
(2) Per il test di primalità, dato un ideale lasciare che p ∈ Z sia tale che a ∩ Z = p Z (questo può essere calcolato in tempo polinomiale e il numero di bit di p è polinomiale nell'input). Controlla in tempo polinomiale se p è primo. Altrimenti a non è un numero primo. Se sì, trova i numeri primi di O K che giacciono sopra p o dal precomputazione o fattorizzando f mod p . In ogni caso, se a è primo, deve essere uno di quei numeri primi.a◃OKp∈Za∩Z=pZppaOKpfpa
(3a), (6a) Per il factoring in numeri primi, dato un ideale trova la sua norma y = N K Q ( a ) = [ O K : a ] . Ancora una volta questo può essere trovato in tempi polinomiali e di conseguenza non è troppo grande. Fattore y in Z (in modo classico o usando l'algoritmo di Shor, a seconda della riduzione desiderata). Questo dà un elenco di numeri primi razionali che dividono y , e quindi come in 2 possiamo trovare l'elenco dei numeri primi di O K che divide y . Dal momento che un | ya◃OKy=NKQ(a)=[OK:a]yZyOKy questo fornisce l'elenco dei numeri primi che dividono a . Infine, è facile determinare l'esponente a cui un primo divide un ideale ideale.a|yOKa
(3b), (6b) Ma Gil vuole la fattorizzazione in irriducibili, non in numeri primi. Risulta che data la fattorizzazione prima di è possibile costruire in modo efficiente una fattorizzazione di x in elementi irriducibili di O K . Per questo sia h K il numero della classe e si noti che è possibile calcolare in modo efficiente la classe ideale di un dato ideale. Ora per trovare un divisore irriducibile di x seleziona h K ideali primi (possibilmente con ripetizione) dalla fattorizzazione di xxOKxOKhKxhKx. Secondo il principio del buco del piccione, un sottoinsieme di questi si moltiplica all'identità nel gruppo di classe; trova un tale sottoinsieme minimo. Il suo prodotto è quindi un ideale ideale generato da un elemento irriducibile. Dividi per questo elemento, rimuovi gli ideali pertinenti dalla fattorizzazione e ripeti. Se la fattorizzazione ha meno di h K elementi, basta prendere un sottoinsieme minimo di tutti i fattori.xhK
(4) Penso che sia possibile contare le fattorizzazioni in irriducibili, ma questo è un po 'di combinatoria extra - per favore, dammi il tempo di elaborarlo. D'altro canto, determinarli tutti non è interessante nel contesto degli algoritmi di fattorizzazione sub-esponenziale poiché in generale ci sono molte fattorizzazioni esponenziali.
(5) Non ne ho idea.