La réponse suivante a été initialement publiée sous forme de commentaire sur le blog de Gil
(1) Soit un champ numérique, où nous supposons que α a un polynôme monique minimal f ∈ Z [ x ] . On peut alors représenter des éléments de l'anneau d'entiers O K sous forme de polynômes en α ou en termes de base intégrale - les deux sont équivalents.K=Q(α)αf∈Z[x]OKα
Maintenant , fixant comme dans (1) il y a une réduction du temps polynomial du problème sur K au problème en Q . Pour vérifier que les calculs (par exemple coupant un idéal avec Z ou factorisant un mod polynomial p ) peuvent être effectués en temps polynomial, voir le livre de Cohen mentionné dans la réponse précédente.KKQZp
En tant que précalcul pour chaque nombre rationnel divisant le discriminant de α (c'est-à-dire le discriminant de f ), trouver tous les nombres premiers de O K situés au-dessus de p .pαfOKp
(2) Pour le test de primalité, étant donné un idéal soit p ∈ Z tel que a ∩ Z = p Z (cela peut être calculé en temps polynomial et le nombre de bits de p est polynomial en entrée). Vérifiez dans le temps polynomial si p est premier. Sinon, a n'est pas premier. Si oui, alors trouver les nombres premiers de O K situés au-dessus de p soit à partir du précalcul, soit en factorisant f mod p . Dans tous les cas, si a est premier, il doit être l'un de ces nombres premiers.a◃OKp∈Za∩Z=pZppaOKpfpa
(3a), (6a) Pour la factorisation en nombres premiers, étant donné un idéal trouver sa norme y = N K Q ( a ) = [ O K : a ] . Encore une fois, cela peut être trouvé en temps polynomial et n'est donc pas trop grand. Facteur ya◃OKy=NKQ(a)=[OK:a]y en (soit classiquement, soit en utilisant l'algorithme de Shor, selon la réduction que vous souhaitez). Cela donne une liste de nombres premiers rationnels divisant y , et donc comme dans 2, nous pouvons trouver la liste des nombres premiers de O K divisant y . Depuis un | yZyOKy cela donne la liste des nombres premiers divisant a . Enfin, il est facile de déterminer l'exposant auquel un nombre premier divise un idéal donné.a|yOKa
(3b), (6b) Mais Gil veut la factorisation en irréductibles, pas en nombres premiers. Il s'avère que, étant donné la factorisation première de il est possible de construire efficacement une factorisation de xxOKx en éléments irréductibles de . Pour cela, soit h K le numéro de classe, et notons qu'il est possible de calculer efficacement la classe idéale d'un idéal donné. Maintenant, pour trouver un diviseur irréductible de x, sélectionnez h K idéaux premiers (éventuellement avec répétition) à partir de la factorisation de xOKhKxhKx. Selon le principe du pigeonnier, un sous-ensemble de ces multiplications se transforme en identité dans le groupe de classe; trouver un tel sous-ensemble minimal. Son produit est alors un idéal principal généré par un élément irréductible. Divisez par cet élément, supprimez les idéaux pertinents de la factorisation et répétez. Si la factorisation a moins de h K éléments, il suffit de prendre un sous-ensemble minimal de tous les facteurs.xhK
(4) Je pense qu'il est possible de compter les factorisations en irréductibles, mais c'est un peu de combinatoire supplémentaire - donnez-moi s'il vous plaît le temps de travailler. D'un autre côté, la détermination de chacun d'eux n'est pas intéressante dans le contexte des algorithmes de factorisation sous-exponentielle car il existe en général de façon exponentielle beaucoup de telles factorisations.
(5) Je n'en ai aucune idée.