fbpx
Wikipedia

Test de primalidad AKS

El test de primalidad AKS o algoritmo AKS es un algoritmo determinista que decide en tiempo polinómico si un número natural es primo o compuesto. Fue diseñado por los científicos de computación Manindra Agrawal, Neeraj Kayal y Nitin Saxena del Instituto tecnológico hindú de Kanpur en el año 2002, y eventualmente mejorado por otros investigadores del área. Su descubrimiento pone fin a uno de los más grandes problemas de la teoría de números y teoría de la complejidad computacional.

El problema de la primalidad

El problema de la primalidad consiste en averiguar si un número natural es primo o compuesto. Hay métodos muy antiguos para resolver este problema como la criba de Eratóstenes (200 a. C.) o la división por tentativa, sin embargo estos métodos resultan ineficaces cuando se desea analizar números grandes. Para decidir la primalidad de un número  , la criba de Eratóstenes requiere un tiempo de ejecución que es proporcional a  . Por otro lado, la cantidad de dígitos que se necesitan para escribir tal número es proporcional a  .

En términos de complejidad computacional, se dice que un método eficaz debería requerir un tiempo polinómico respecto a la cantidad de dígitos. En este caso se desea tener un algoritmo que decida en un tiempo proporcional a  , si   es un número primo o compuesto. Utilizando la notación O grande, esta proporción se abrevia como  . El algoritmo AKS es el primer algoritmo que se conoce con estas características.

Historia

Antes de que Agrawal, Kayal y Saxena describieran su algoritmo, se hicieron muchos intentos por resolver el problema de la primalidad de manera eficiente. En 1798 Gauss sugirió que para distinguir a los números primos de los números compuestos no era necesario descomponer en factores a estos últimos.

En 1636 Fermat presentó su célebre pequeño teorema de Fermat con el cual se dio a conocer una característica que cumplen todos los números primos. Dicho teorema afirma que cuando   es un número primo la siguiente congruencia se cumple:

 

Este teorema se tomó como fundamento de varios tests de primalidad.

El test de primalidad de Miller-Rabin fue presentado en 1980. El algoritmo sí funciona en tiempo polinomial, pero es probabilista. Por ejemplo, después de realizar el test de Miller-Rabin   veces, el algoritmo o bien expide un certificado de que el número es compuesto o bien afirma que el número tiene una alta probabilidad de ser primo. El test de Miller-Rabin requiere un tiempo   con una probabilidad de error de   en  .

En 1983 Leonard Adleman, Carl Pomerance, y Robert Rumely crearon un test de primalidad que sí es determinista pero cuyo tiempo de ejecución era exponencial:  . Su algoritmo está basado en teoría muy compleja y una generalización del pequeño teorema de Fermat hacia los números enteros en campos ciclotómicos. Sin embargo, este algoritmo es tan rápido que durante mucho tiempo se usaron variantes para romper marcas en cuanto a comprobar la primalidad de números con más de mil cifras decimales. A pesar de este gran logro, todavía existía la pregunta de si existe algún algoritmo que funcione en tiempo polinómico y que fuera determinista.

En 1992 surgieron otra clase algoritmos basados en curvas elípticas, pero que tampoco eran deterministas.

Finalmente, en 1999 Manindra Agrawal estudió una variante del pequeño teorema de Fermat. Dos años después, él y sus dos estudiantes del IITK comenzaron a analizar todas las propiedades de esta variante hasta que encontraron una caracterización completa de los números primos. Con base en esta caracterización, en el año 2002 presentaron su algoritmo en el artículo PRIMES is in P.

Fundamentos del algoritmo

El algoritmo AKS está basado en una generalización del pequeño teorema de Fermat hacia los polinomios. El teorema afirma que si   y   son números coprimos, donde   es primo, entonces se cumple la congruencia:

 

Es decir, si se eleva el polinomio   a la potencia  , y luego se divide por  , entonces el residuo de dicha división es  . Más aún, si se cumple esta congruencia entonces   debe ser un número primo.

A pesar de que esta congruencia caracteriza por completo a los números primos, no es factible aplicarla dado que el cálculo de   requiere más tiempo que la criba de Eratóstenes. En su lugar, se utiliza la congruencia

 

Es decir, la equivalencia entre los residuos de los polinomios   y   después de haber sido divididos por   y a su vez cada coeficiente por  . En lenguaje matemático se abrevia como   en el anillo  . Algunos números compuestos   satisfacen esta congruencia, pero si se elige   de manera adecuada y se cumple la congruencia para varios números  , entonces   debe ser o un número primo o al menos una potencia de un número primo.

El "orden de un número   módulo  " se denota matemáticamente como  . Representa el más pequeño valor de   para el cual  . El algoritmo AKS selecciona   como el más pequeño que cumple   (véase Logaritmo binario).

Además de esto, el algoritmo también requiere conocer la función de Euler y el máximo común divisor.

La corrección del algoritmo está garantizada por un teorema que originalmente fue demostrado por los autores y posteriormente resumido por Lenstra, Jr. y Bernstein. En su forma más sencilla, dicho teorema afirma que si  ,   y   son enteros positivos, y si   un conjunto finito de enteros, entonces   es una potencia de un número primo siempre y cuando se cumplan las siguientes condiciones:

  •  
  •  
  •   para cada par de elementos   que pertenecen a  
  • El hecho de que   divida a  , implica que  
  • Para cualquier elemento   de   se cumple   en el anillo  

Descripción formal

El algoritmo se puede expresar en pseudocódigo como sigue:

Algoritmo AKS: Decide si un número natural   es un número primo o compuesto
  1. Si existen números naturales   tales que   entonces   es compuesto
  2. Encuentre el más pequeño valor de   tal que  
  3. Si   para algún número natural   entonces   es compuesto
  4. Si   entonces   es primo
  5. Para   desde   hasta   haga lo siguiente:
    1. Si   entonces   es compuesto
  6.   es primo

Análisis e implementación

  • El primer paso se puede efectuar comprobando que   para  . Esto requiere un tiempo  
  • El segundo paso se puede implementar buscando al primer valor de   que verifique   para cualquier valor de  . Como  , entonces este paso se efectúa en un tiempo  
  • En el tercer paso se puede utilizar el algoritmo de Euclides para buscar el máximo común divisor de dos números. Dado que se necesitan calcular   de estos valores, el tiempo necesario es  
  • En el cuarto paso solo se necesita comparar los dígitos. Esto necesita un tiempo  
  • El quinto paso es el más lento de todos. Se puede utilizar una variante de la exponenciación binaria para calcular la parte izquierda de cada congruencia. Se necesitan calcular   de estas congruencias. Por lo tanto este paso requiere un tiempo  

Por lo tanto el algoritmo AKS requiere un tiempo  . Es decir, el algoritmo AKS resuelve el problema de la primalidad de manera determinista y en un tiempo polinómico. En la práctica, el algoritmo parece correr en un tiempo  . Este tiempo se podría demostrar siempre y cuando se demuestre la conjetura de los números primos gemelos.

Referencias

  • Manindra Agrawal, Neeraj Kayal, Nitin Saxena (2004). «PRIMES is in P». Annals of Mathematics 160 (2). ISSN 0003-486X , 781-793. 
  • Folkmar Bornemann (2003). «PRIMES Is in P: A Breakthrough for "Everyman"». Notices of the AMS 50 (5). ISSN 0002-9920 , 545-552. 
  • José de Jesús Angel Angel, Guillermo Morales-Luna (2008). «El algoritmo de Agrawal, Kayal y Saxena para decidir primalidad». Carta Informativa, Sociedad Matemática Mexicana (55).  (enlace roto disponible en Internet Archive; véase el historial, la primera versión y la última).
  • Bernstein, Daniel (2003). Proving primality after Agrawal-Kayal-Saxena. Preprint. 
  • Crandall, R; Papadopoulos, J (2003). «On the implementation of AKS-class primality tests». Advanced Computation Group. 

Enlaces externos

  • The AKS "PRIMES in P" Algorithm Resource
  • Finding primes & proving primality
  •   Datos: Q294284

test, primalidad, test, primalidad, algoritmo, algoritmo, determinista, decide, tiempo, polinómico, número, natural, primo, compuesto, diseñado, científicos, computación, manindra, agrawal, neeraj, kayal, nitin, saxena, instituto, tecnológico, hindú, kanpur, a. El test de primalidad AKS o algoritmo AKS es un algoritmo determinista que decide en tiempo polinomico si un numero natural es primo o compuesto Fue disenado por los cientificos de computacion Manindra Agrawal Neeraj Kayal y Nitin Saxena del Instituto tecnologico hindu de Kanpur en el ano 2002 y eventualmente mejorado por otros investigadores del area Su descubrimiento pone fin a uno de los mas grandes problemas de la teoria de numeros y teoria de la complejidad computacional Indice 1 El problema de la primalidad 2 Historia 3 Fundamentos del algoritmo 4 Descripcion formal 5 Analisis e implementacion 6 Referencias 7 Enlaces externosEl problema de la primalidad EditarEl problema de la primalidad consiste en averiguar si un numero natural es primo o compuesto Hay metodos muy antiguos para resolver este problema como la criba de Eratostenes 200 a C o la division por tentativa sin embargo estos metodos resultan ineficaces cuando se desea analizar numeros grandes Para decidir la primalidad de un numero n displaystyle n la criba de Eratostenes requiere un tiempo de ejecucion que es proporcional a n displaystyle n Por otro lado la cantidad de digitos que se necesitan para escribir tal numero es proporcional a log n displaystyle log n En terminos de complejidad computacional se dice que un metodo eficaz deberia requerir un tiempo polinomico respecto a la cantidad de digitos En este caso se desea tener un algoritmo que decida en un tiempo proporcional a log k n displaystyle log k n si n displaystyle n es un numero primo o compuesto Utilizando la notacion O grande esta proporcion se abrevia como O log k n displaystyle mathcal O left log k n right El algoritmo AKS es el primer algoritmo que se conoce con estas caracteristicas Historia EditarAntes de que Agrawal Kayal y Saxena describieran su algoritmo se hicieron muchos intentos por resolver el problema de la primalidad de manera eficiente En 1798 Gauss sugirio que para distinguir a los numeros primos de los numeros compuestos no era necesario descomponer en factores a estos ultimos En 1636 Fermat presento su celebre pequeno teorema de Fermat con el cual se dio a conocer una caracteristica que cumplen todos los numeros primos Dicho teorema afirma que cuando n displaystyle n es un numero primo la siguiente congruencia se cumple a n a mod n displaystyle a n equiv a pmod n Este teorema se tomo como fundamento de varios tests de primalidad El test de primalidad de Miller Rabin fue presentado en 1980 El algoritmo si funciona en tiempo polinomial pero es probabilista Por ejemplo despues de realizar el test de Miller Rabin k displaystyle k veces el algoritmo o bien expide un certificado de que el numero es compuesto o bien afirma que el numero tiene una alta probabilidad de ser primo El test de Miller Rabin requiere un tiempo O k log 2 n displaystyle mathcal O left k log 2 n right con una probabilidad de error de 1 displaystyle 1 en 4 k displaystyle 4 k En 1983 Leonard Adleman Carl Pomerance y Robert Rumely crearon un test de primalidad que si es determinista pero cuyo tiempo de ejecucion era exponencial log n O log log log n displaystyle left log n right mathcal O left log log log n right Su algoritmo esta basado en teoria muy compleja y una generalizacion del pequeno teorema de Fermat hacia los numeros enteros en campos ciclotomicos Sin embargo este algoritmo es tan rapido que durante mucho tiempo se usaron variantes para romper marcas en cuanto a comprobar la primalidad de numeros con mas de mil cifras decimales A pesar de este gran logro todavia existia la pregunta de si existe algun algoritmo que funcione en tiempo polinomico y que fuera determinista En 1992 surgieron otra clase algoritmos basados en curvas elipticas pero que tampoco eran deterministas Finalmente en 1999 Manindra Agrawal estudio una variante del pequeno teorema de Fermat Dos anos despues el y sus dos estudiantes del IITK comenzaron a analizar todas las propiedades de esta variante hasta que encontraron una caracterizacion completa de los numeros primos Con base en esta caracterizacion en el ano 2002 presentaron su algoritmo en el articulo PRIMES is in P Fundamentos del algoritmo EditarEl algoritmo AKS esta basado en una generalizacion del pequeno teorema de Fermat hacia los polinomios El teorema afirma que si n displaystyle n y a displaystyle a son numeros coprimos donde n displaystyle n es primo entonces se cumple la congruencia x a n x n a mod n displaystyle left x a right n equiv x n a pmod n Es decir si se eleva el polinomio x a displaystyle x a a la potencia n displaystyle n y luego se divide por n displaystyle n entonces el residuo de dicha division es x n a displaystyle x n a Mas aun si se cumple esta congruencia entonces n displaystyle n debe ser un numero primo A pesar de que esta congruencia caracteriza por completo a los numeros primos no es factible aplicarla dado que el calculo de x a n displaystyle x a n requiere mas tiempo que la criba de Eratostenes En su lugar se utiliza la congruencia x a n x n a mod x r 1 n displaystyle left x a right n equiv x n a pmod x r 1 n Es decir la equivalencia entre los residuos de los polinomios x a n displaystyle x a n y x n a displaystyle x n a despues de haber sido divididos por x r 1 displaystyle x r 1 y a su vez cada coeficiente por n displaystyle n En lenguaje matematico se abrevia como x a n x n a displaystyle x a n x n a en el anillo Z n x x r 1 displaystyle mathbb Z n left x right left langle x r 1 right rangle Algunos numeros compuestos n displaystyle n satisfacen esta congruencia pero si se elige r displaystyle r de manera adecuada y se cumple la congruencia para varios numeros a displaystyle a entonces n displaystyle n debe ser o un numero primo o al menos una potencia de un numero primo El orden de un numero a displaystyle a modulo n displaystyle n se denota matematicamente como o n a displaystyle mathrm o n a Representa el mas pequeno valor de k displaystyle k para el cual a k 1 mod n displaystyle a k equiv 1 pmod n El algoritmo AKS selecciona r displaystyle r como el mas pequeno que cumple o r n gt log 2 2 n displaystyle mathrm o r n gt log 2 2 n vease Logaritmo binario Ademas de esto el algoritmo tambien requiere conocer la funcion de Euler y el maximo comun divisor La correccion del algoritmo esta garantizada por un teorema que originalmente fue demostrado por los autores y posteriormente resumido por Lenstra Jr y Bernstein En su forma mas sencilla dicho teorema afirma que si n displaystyle n r displaystyle r y v displaystyle v son enteros positivos y si S displaystyle S un conjunto finito de enteros entonces n displaystyle n es una potencia de un numero primo siempre y cuando se cumplan las siguientes condiciones m c d n r 1 displaystyle mathrm mcd n r 1 o r n v displaystyle mathrm o r n v m c d n b b 1 displaystyle mathrm mcd n b b prime 1 para cada par de elementos b b displaystyle b b prime que pertenecen a S displaystyle S El hecho de que d displaystyle d divida a ϕ r v displaystyle phi r v implica que S ϕ r 1 S 2 2 d ϕ r d displaystyle binom S phi r 1 S geq 2 2d left lfloor sqrt phi r d right rfloor Para cualquier elemento b displaystyle b de S displaystyle S se cumple x b n x n b displaystyle x b n x n b en el anillo Z n x x r 1 displaystyle mathbb Z n left x right left langle x r 1 right rangle Descripcion formal EditarEl algoritmo se puede expresar en pseudocodigo como sigue Algoritmo AKS Decide si un numero natural n displaystyle n es un numero primo o compuestoSi existen numeros naturales a b gt 1 displaystyle a b gt 1 tales que n a b displaystyle n a b entonces n displaystyle n es compuesto Encuentre el mas pequeno valor de r displaystyle r tal que o r n gt log 2 2 n displaystyle mathrm o r n gt log 2 2 n Si 1 lt m c d a n lt n displaystyle 1 lt mathrm mcd a n lt n para algun numero natural a r displaystyle a leq r entonces n displaystyle n es compuesto Si n r displaystyle n leq r entonces n displaystyle n es primo Para a displaystyle a desde 1 displaystyle 1 hasta ϕ r log 2 n displaystyle left lfloor sqrt phi r log 2 n right rfloor haga lo siguiente Si x a n x n a mod x r 1 n displaystyle left x a right n not equiv x n a pmod x r 1 n entonces n displaystyle n es compuesto n displaystyle n es primoAnalisis e implementacion EditarEl primer paso se puede efectuar comprobando que n b b n displaystyle left lfloor sqrt b n right rfloor b neq n para b 2 3 4 log 2 n displaystyle b 2 3 4 ldots left lfloor log 2 n right rfloor Esto requiere un tiempo O log 3 n displaystyle tilde mathcal O log 3 n El segundo paso se puede implementar buscando al primer valor de r displaystyle r que verifique n k 1 mod r displaystyle n k not equiv 1 pmod r para cualquier valor de k 1 2 3 log 2 2 n displaystyle k 1 2 3 ldots left lfloor log 2 2 n right rfloor Como r log 2 5 n displaystyle r leq lceil log 2 5 n rceil entonces este paso se efectua en un tiempo O log 7 n displaystyle tilde mathcal O left log 7 n right En el tercer paso se puede utilizar el algoritmo de Euclides para buscar el maximo comun divisor de dos numeros Dado que se necesitan calcular r displaystyle r de estos valores el tiempo necesario es O log 6 n displaystyle mathcal O log 6 n En el cuarto paso solo se necesita comparar los digitos Esto necesita un tiempo O log n displaystyle mathcal O log n El quinto paso es el mas lento de todos Se puede utilizar una variante de la exponenciacion binaria para calcular la parte izquierda de cada congruencia Se necesitan calcular ϕ r log 2 n displaystyle left lfloor sqrt phi r log 2 n right rfloor de estas congruencias Por lo tanto este paso requiere un tiempo O log 21 2 n displaystyle tilde mathcal O left log 21 2 n right Por lo tanto el algoritmo AKS requiere un tiempo O log 21 2 n displaystyle tilde mathcal O left log 21 2 n right Es decir el algoritmo AKS resuelve el problema de la primalidad de manera determinista y en un tiempo polinomico En la practica el algoritmo parece correr en un tiempo O log 6 n displaystyle tilde mathcal O log 6 n Este tiempo se podria demostrar siempre y cuando se demuestre la conjetura de los numeros primos gemelos Referencias EditarManindra Agrawal Neeraj Kayal Nitin Saxena 2004 PRIMES is in P Annals of Mathematics 160 2 ISSN 0003 486X 781 793 Folkmar Bornemann 2003 PRIMES Is in P A Breakthrough for Everyman Notices of the AMS 50 5 ISSN 0002 9920 545 552 Jose de Jesus Angel Angel Guillermo Morales Luna 2008 El algoritmo de Agrawal Kayal y Saxena para decidir primalidad Carta Informativa Sociedad Matematica Mexicana 55 enlace roto disponible en Internet Archive vease el historial la primera version y la ultima Bernstein Daniel 2003 Proving primality after Agrawal Kayal Saxena Preprint Crandall R Papadopoulos J 2003 On the implementation of AKS class primality tests Advanced Computation Group Enlaces externos EditarThe AKS PRIMES in P Algorithm Resource Finding primes amp proving primality Datos Q294284Obtenido de https es wikipedia org w index php title Test de primalidad AKS amp oldid 124039827, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos