Quand le test de primalité AKS est-il réellement plus rapide que les autres tests?


24

J'essaie de me faire une idée de la façon dont le test de primalité AKS doit être interprété au fur et à mesure que j'en apprends, par exemple un corollaire pour prouver que PRIMES ⊆ P, ou un algorithme réellement pratique pour le test de primalité sur ordinateur.

Le test a une durée d'exécution polynomiale mais avec un degré élevé et des constantes élevées possibles. Donc, en pratique, à quel surpasse-t-il les autres tests de primalité? Ici, est le nombre de chiffres du nombre premier, et "surpass" se réfère à la durée d'exécution approximative des tests sur les architectures informatiques typiques.nn

Je m'intéresse aux algorithmes fonctionnellement comparables, c'est-à-dire déterministes qui n'ont pas besoin de conjectures pour être corrects.

De plus, l'utilisation d'un tel test par rapport aux autres est-elle pratique étant donné les besoins en mémoire du test?

Réponses:


23

Réponse rapide: jamais, à des fins pratiques. Il n'est actuellement d'aucune utilité pratique.

Temps de primalité mesurés

Tout d'abord, séparons les tests de composition "pratiques" des preuves de primalité. Le premier est assez bon pour presque toutes les fins, bien qu'il existe différents niveaux de tests que les gens jugent adéquats. Pour les nombres inférieurs à 2 ^ 64, pas plus de 7 tests de Miller-Rabin, ou un test BPSW est requis pour une réponse déterministe. Ce sera beaucoup plus rapide que AKS et sera tout aussi correct dans tous les cas. Pour les nombres supérieurs à 2 ^ 64, BPSW est un bon choix, avec quelques tests Miller-Rabin à base aléatoire supplémentaires ajoutant une certaine confiance supplémentaire pour un coût très faible. Presque toutes les méthodes de preuve commenceront (ou devraient le faire) avec un test comme celui-ci car il est bon marché et signifie que nous ne travaillons dur que sur des nombres qui sont presque certainement premiers.

Passons aux preuves. Dans chaque cas, la preuve résultante ne nécessite aucune conjecture, de sorte que celles-ci peuvent être fonctionnellement comparées. Le "gotcha" d'APR-CL est qu'il n'est pas tout à fait polynomial, et le "gotcha" d'ECPP / fastECPP est qu'il peut exister des nombres qui prennent plus de temps que prévu.

Dans le graphique, nous voyons deux implémentations AKS open source - la première étant du papier v6, la seconde comprenant des améliorations de Bernstein et Voloch et une belle heuristique r / s de Bornemann. Ceux-ci utilisent la segmentation binaire dans GMP pour les multiplications polynomiales, ils sont donc assez efficaces, et l'utilisation de la mémoire n'est pas un problème pour les tailles considérées ici. Ils produisent de belles lignes droites avec une pente de ~ 6,4 sur le graphique log-log, ce qui est génial. Mais l'extrapolation à 1000 chiffres arrive à des moments estimés dans les centaines de milliers à des millions d'années, contre quelques minutes pour APR-CL et ECPP. Il y a d'autres optimisations qui pourraient être faites à partir du document Bernstein de 2002, mais je ne pense pas que cela changera sensiblement la situation (bien que jusqu'à ce que cela soit mis en œuvre, cela n'est pas prouvé).

Finalement, AKS bat la division d'essai. La méthode du théorème 5 BLS75 (par exemple la preuve n-1) nécessite une factorisation partielle de n-1. Cela fonctionne très bien à de petites tailles, et aussi lorsque nous sommes chanceux et que n-1 est facile à factoriser, mais finalement nous devrons rester coincés à factoriser un grand semi-premier. Il existe des implémentations plus efficaces, mais il n'évolue vraiment pas au-delà des 100 chiffres. Nous pouvons voir que AKS passera cette méthode. Donc, si vous posiez la question en 1975 (et que vous aviez alors l'algorithme AKS), nous pourrions calculer le croisement pour savoir où AKS était l'algorithme le plus pratique. Mais à la fin des années 1980, l'APR-CL et d'autres méthodes cyclotomiques étaient la comparaison correcte, et au milieu des années 1990, nous devions inclure l'ECPP.

logloglognO(log5+ϵ(n))O(log4+ϵ(n))

O(log4+ϵ(n))(lgn)4+o(1)(lgn)4+o(1)

Certains de ces algorithmes peuvent être facilement parallélisés ou distribués. AKS très facilement (chaque test est indépendant). ECPP n'est pas trop difficile. Je ne suis pas sûr d'APR-CL.

ECPP et les méthodes BLS75 produisent des certificats qui peuvent être rapidement et indépendamment vérifiés. C'est un énorme avantage par rapport à AKS et APR-CL, où nous n'avons qu'à faire confiance à l'implémentation et à l'ordinateur qui l'ont produit.


18

O~(log6n)O~(log4n)O~(n1/7)O(lognO(logloglogn))

O~(log2n)280O~(log2n)

Dans tous ces tests, la mémoire n'est pas un problème.


Dans leur commentaire, jbapple soulève la question de savoir quel critère de primalité utiliser dans la pratique. C'est une question d'implémentation et de benchmarking: implémentez et optimisez quelques algorithmes, et déterminez expérimentalement lequel est le plus rapide dans quelle gamme. Pour les curieux, les codeurs de PARI ont fait exactement cela, et ils ont trouvé une fonction déterministe isprimeet une fonction probabiliste ispseudoprime, qui peuvent toutes deux être trouvées ici . Le test probabiliste utilisé est Miller – Rabin. Le déterministe est BPSW.


Voici plus d'informations de Dana Jacobsen :

Pari depuis la version 2.3 utilise une preuve de primalité APR-CL pour isprime(x), et un test premier probable BPSW (avec un test Lucas "presque extra fort") pour ispseudoprime(x).

Ils prennent des arguments qui changent le comportement:

  • isprime(x,0) (par défaut.) Utilise une combinaison (BPSW, quick Pocklington ou BLS75 théorème 5, APR-CL).
  • isprime(x,1)n1
  • isprime(x,2) Utilise APR-CL.

  • ispseudoprime(x,0) (par défaut.) Utilise BPSW (MR avec base 2, Lucas "presque extra fort").

  • ispseudoprime(x,k)k1kmpz_is_probab_prime_p(x,k)

Pari 2.1.7 a utilisé une configuration bien pire. isprime(x)était juste des tests MR (par défaut 10), ce qui a conduit à des choses amusantes comme le isprime(9)retour vrai souvent. L'utilisation isprime(x,1)ferait une preuve Pocklington, ce qui était bien pour environ 80 chiffres et devenait alors trop lent pour être généralement utile.

Vous écrivez aussi En réalité, personne n'utilise ces algorithmes, car ils sont trop lents. Je crois que je sais ce que vous voulez dire, mais je pense que c'est trop fort selon votre public. AKS bien sûr, incroyablement lent, mais APR-CL et ECPP sont assez rapides pour que certaines personnes les utilisent. Ils sont utiles pour la cryptographie paranoïaque et utiles pour les personnes faisant des choses comme primegapsou factordboù l'on a assez de temps pour vouloir des nombres premiers éprouvés.

[Mon commentaire à ce sujet: lorsque nous recherchons un nombre premier dans une plage spécifique, nous utilisons une approche de tamisage suivie de quelques tests probabilistes relativement rapides. Ce n'est qu'alors, le cas échéant, que nous exécutons un test déterministe.]

Dans tous ces tests, la mémoire n'est pas un problème. C'est un problème pour AKS. Voir, par exemple, cette impression électronique . Cela dépend en partie de la mise en œuvre. Si l'on implémente ce que la vidéo de numberphile appelle AKS (qui est en fait une généralisation du petit théorème de Fermat), l'utilisation de la mémoire sera extrêmement élevée. L'utilisation d'une implémentation NTL de l'algorithme v1 ou v6 comme le papier référencé entraînera de grandes quantités de mémoire stupides. Une bonne implémentation GMP v6 utilisera toujours ~ 2 Go pour un nombre premier de 1024 bits, ce qui est beaucoupde mémoire pour un si petit nombre. L'utilisation de certaines des améliorations de Bernstein et de la segmentation binaire GMP conduit à une bien meilleure croissance (par exemple ~ 120 Mo pour 1024 bits). C'est encore beaucoup plus important que les autres méthodes, et sans surprise, ce sera des millions de fois plus lent que l'APR-CL ou l'ECPP.


2
Je ne crois pas que cela réponde à la question posée, ce qui nécessiterait le calcul des constantes de ces tests.
jbapple

1
Utilisez vos downvotes chaque fois que vous rencontrez un message excessivement bâclé et sans effort, ou une réponse qui est clairement et peut-être dangereusement incorrecte. - Je ne vois pas comment la personne qui vote en aval cette réponse justifie le vote.
Pål GD

2
n

nlogn

Bon article, mais votre définition de "personne" est très légèrement décalée. Par curiosité, j'ai testé le temps qu'il faut pour vérifier un nombre probable de DSA 2048 bits généré avec OpenSSL (en utilisant openssl pkeyparam -textpour extraire la chaîne hexadécimale) à l'aide de PARI isprime(APR-CL comme indiqué): environ 80 sur un ordinateur portable rapide. Pour référence, Chromium a besoin d'un peu plus de 0,25 s pour chaque itération de mon implémentation de démonstration JavaScript du test Frobenius (qui est beaucoup plus fort que MR), donc APR-CL est certainement paranoïaque mais faisable.
Arne Vogel

2

O(f(n))O(f(n))O(g(n))nnn

vu cet article récent sur arxiv qui analyse ce sujet en profondeur / en détail, ne sais pas ce que les gens en pensent, n'a pas entendu de réactions jusqu'à présent, il semble peut-être une thèse créée par les étudiants, mais peut-être l'une des analyses les plus détaillées / complètes de utilisation pratique de l'algorithme disponible.


AKS est plus efficace que quoi? Quelle est la compétition?
Yuval Filmus

tous les autres algorithmes. principalement probabilistc? détails dans le journal
vzn
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.