Détermine s'il y a un nombre premier dans un intervalle connu pour être en P ou NP-complet?

13

J'ai vu dans ce post sur stackoverflow qu'il existe des algorithmes relativement rapides pour tamiser un intervalle de nombres pour voir s'il y a un nombre premier dans cet intervalle. Cependant, cela signifie-t-il que le problème de décision global de: (Existe-t-il un nombre premier dans un intervalle?) Est en P. (Il y avait beaucoup de réponses à ce message que je n'ai pas lu, donc je m'excuse si cette question est une dupliquer ou inutile).

D'une part, si l'intervalle est suffisamment grand (par exemple ), alors quelque chose comme le postulat de Bertrand s'applique et il y a certainement un prime dans cet intervalle. Cependant, je sais également qu'il existe des écarts arbitrairement importants entre deux nombres premiers (par exemple . [ N ! , N ! + N ][N,2N][N!,N!+N]

Même si le problème de décision est dans PI, je ne vois pas comment le problème de recherche correspondant est également traitable, car nous ne pourrons peut-être pas utiliser les mêmes propriétés concernant la distribution connue des nombres premiers lors de la recherche binaire.

Ari
la source

Réponses:

17

Votre problème est donc le suivant:

Entrée: entiers Question: existe-t-il un nombre premier dans ?[ , u ],u
[,u]

Pour autant que je sache, on ne sait pas si ce problème est en P ou non.

Voici ce que je sais:

  • Le test de primalité (étant donné un nombre unique, testez s'il est premier) est en P, donc si la plage est suffisamment petite, vous pouvez tester de manière exhaustive chaque nombre dans la plage pour voir s'il est premier - mais cela ne conduit pas à un algorithme général.

  • Si la conjecture de Cramer est vraie, alors le problème vient de P. La conjecture de Cramer dit que l'écart entre les nombres premiers consécutifs près de est , donc l'algorithme suivant sera en P: itérer sur les nombres , testant chacun s'il est premier; si vous en trouvez un qui est premier, arrêtez immédiatement avec une réponse oui; si vous touchez , arrêtez avec aucune réponse. La conjecture de Cramer nous dit que vous vous arrêterez après la plupart des tests de primalité , de sorte que l'algorithme s'exécutera en temps polynomial.O ( ( log n ) 2 ) , + 1 , + 2 , + 3 , u O ( ( log ) 2 )nO((Journaln)2),+1,+2,+3,uO((Journal)2)

    Malheureusement, les résultats connus sur les écarts premiers ne semblent pas assez solides pour prouver sans condition que le problème est en P.

  • Voici un autre algorithme simple: choisissez à plusieurs reprises un entier aléatoire dans et testez s'il est premier. Arrêtez-vous si vous trouvez un nombre premier ou si vous avez essayé tous les nombres entiers dans et qu'aucun n'était premier. Heureusement, nous devons nous attendre à ce que cela soit efficace dans la pratique. Le théorème des nombres premiers nous dit que si vous choisissez au hasard un nombre au voisinage de , la probabilité qu'il soit premier sera d'environ . Ainsi, heuristiquement, nous devrions nous attendre à ce qu'après environ itérations, vous trouverez généralement un premier et un arrêt, s'il en existe un. En revanche, en raison du problème du collecteur de coupons, s'il n'y a pas d'amorce dans la plage[ , u ] [ , u ] u 1 / log n O ( log u ) [ , u ] O ( ( u - l ) log ( u - l ) )r[,u][,u]u1/JournalnO(Journalu)[,u], vous vous arrêterez après environ itérations. Donc, si nous avions une bonne limite supérieure sur la taille de l'écart le plus long entre les nombres premiers, cela impliquerait que le problème est dans BPP. Même sans une telle limite supérieure, il s'ensuit que les instances de problèmes aléatoires sont faciles.O((u-l)Journal(u-l))

  • On peut probablement appliquer des méthodes de tamisage pour améliorer le temps de fonctionnement dans la pratique (par exemple, pour éviter de faire des tests de primalité sur des nombres qui sont divisibles par un petit nombre premier). Je ne sais pas si cela peut conduire à une amélioration asymptotique.

  • En raison de ces techniques, le problème est probablement facile à mettre en pratique.

  • En raison des remarques ci-dessus, je doute personnellement que le problème soit NP-complet.

DW
la source
Cela ne peut-il pas être fait en temps avec un tamis principal? O(u)
Quelklef
@Quelklef, bien sûr, mais cela prend du temps exponentiel (exponentiel dans la longueur de l'entrée). Nous demandons s'il existe un algorithme polynomial temporel, c'est-à-dire s'il existe un algorithme qui s'exécute en temps . O(poly(Journalu))
DW
Attendez, ? Pourquoi n'est-ce pas ? O(poly(Journalu))O(poly(u))
Quelklef
@Quelklef, car les nombres sont représentés en binaire, et il faut bits pour représenter en binaire. Cela dépasse probablement la portée d'un champ de commentaires, veuillez donc répondre à toutes les autres questions que vous pourriez avoir sur la signification du «temps polynomial» ailleurs - par exemple, en utilisant le bouton «Poser une question» en haut à droite. Je vous remercie! Journaluu
DW
Pas besoin, tu as dissipé ma confusion. Merci beaucoup!
Quelklef