En matemáticas e informática , un certificado de primalidad es una prueba rigurosa de que un número es primo . Tener un certificado de primalidad te permite comprobar que un número es primo sin recurrir a pruebas de primalidad .
En la teoría de la complejidad computacional , por regla general, se entiende que el tamaño del certificado, así como el tiempo requerido para verificarlo, depende polinómicamente de la longitud de la entrada del número, es decir, del número de dígitos en eso.
La existencia de certificados de primalidad de polinomios muestra que problemas como la prueba de primalidad y la factorización de enteros pertenecen a la clase NP , ya que, según una de las definiciones equivalentes de esta clase, son problemas cuya solución se puede verificar en tiempo polinomial si se añade un se entrega certificado. Además, estos problemas se encuentran en la clase co-NP , que se deriva de su definición como una clase de complementos a los problemas de NP; de hecho, cualquiera de sus divisores no triviales puede ser un certificado polinomial de que un número es compuesto.
Por lo tanto, los certificados de primalidad fueron una de las primeras indicaciones de que la prueba de primalidad no era NP-completa , ya que si lo fuera, se seguiría que una clase NP está anidada en una co-NP, que a su vez suele ser[ aclarar ] considerado[ ¿por quién? ] es incorrecto. Además, el descubrimiento de los certificados polinómicos hizo que la prueba de primalidad fuera el primer problema que se sabe que pertenece tanto a NP como a co-NP, pero no se sabe que esté en la clase P. Con el advenimiento de la prueba Agrawal-Kayal-Saxena en 2002, el primer problema (y actualmente el único[ ¿cuándo? ] ) de la prueba de primalidad polinomial determinista, se encontró que el problema aún radica en P.
Históricamente, el concepto de certificados de primalidad se introdujo con el advenimiento del certificado Pratt , que fue obtenido en 1975 por Vaughan Pratt [1] , quien describió su estructura y demostró que el tamaño de un certificado depende polinomialmente de la longitud de un registro numérico. , y también que se puede verificar para un tiempo polinomial. El certificado se basa en la prueba de Lucas , que a su vez se deriva del pequeño teorema de Fermat :
(Teorema de Luc) Un número es primo si y solo si hay un elemento en el anillo de módulo de residuos tal que:
|
Las condiciones escritas significan exactamente que el orden del elemento es .
Al tener dicho número (llamado testigo de la simplicidad ) y dividirlo en factores primos, puede verificar rápidamente las condiciones anteriores: debe realizar exponenciaciones módulo, lo que se puede hacer para multiplicaciones usando exponenciación binaria . Las propias multiplicaciones en la implementación ingenua ("en una columna") se realizan en , lo que da una estimación general del tiempo de ejecución en .
Al mismo tiempo, debe tenerse en cuenta que además de las condiciones anteriores, también es necesario verificar que los números presentados en el certificado como primos sean realmente tales, por lo tanto, además del testimonio de primalidad y división en factores primos, el certificado de primalidad de un número debe incluir también certificados de primalidad de todos los factores en él indicados. Así, conviene representar un certificado en forma de árbol, en cuyos nodos hay números primos y sus correspondientes testigos de primalidad, y los descendientes del nodo en el que está almacenado el número son divisores primos del número . En consecuencia, el número corresponde a las hojas del árbol .
Se puede demostrar por inducción que hay a lo sumo nodos internos en dicho árbol , es decir, aquellos que contienen un número primo impar. Considerando que cada nodo del árbol almacena un bit para escribir números en él, podemos concluir que el tamaño total del árbol no excede . El tiempo total de verificación, a su vez, se puede estimar en , ya que es necesario realizar acciones en cada uno de los nodos.
Si bien los certificados de Pratt son útiles en teoría y fáciles de verificar, encontrar un certificado para un número requiere la factorización y otros números potencialmente grandes. Esto es fácil de hacer en algunos casos especiales, por ejemplo, para los números primos de Fermat , pero en el caso general, esta tarea ahora es mucho más difícil que la prueba habitual de la primacía de un número.
El artículo "PRIMES is in P" [2] fue un gran avance en la informática teórica . Este artículo, publicado por Manindra Agrawal y sus dos alumnos Niraj Kayal y Nitin Saxena en agosto de 2002, demuestra que el famoso problema de la primalidad se puede resolver de forma determinista en tiempo polinomial. Los autores recibieron el Premio Gödel , que es de $5,000 [3] , y el Premio Fulkerson 2006 por su trabajo.
Debido a que la prueba de primalidad ahora se puede realizar en tiempo polinomial usando la prueba AKS , un número primo puede verse como un certificado de su propia primalidad. Esta prueba se completa a tiempo , lo que hace que dicha verificación sea más costosa que usar el certificado de Pratt, pero no requiere encontrar el certificado en sí.
Algoritmos de teoría de números | |
---|---|
Pruebas de simplicidad | |
Encontrar números primos | |
Factorización | |
logaritmo discreto | |
Encontrar MCD | |
Módulo aritmético | |
Multiplicación y división de números. | |
Calcular la raíz cuadrada |