Teste de primalidade AKS

Fonte: testwiki
Saltar para a navegação Saltar para a pesquisa

Predefinição:Mais-notas O teste de primalidade AKS (também conhecido como teste de primalidade Agrawal-Kayal-Saxena) é um algoritmo de teste de primalidade determinístico criado e publicado por cientistas Indianos chamados Manindra Agrawal, Neeraj Kayal e Nitin Saxena em 6 de agosto de 2002 em um trabalho intitulado "PRIMES is in P".Predefinição:Ref

Os autores receberam o Premio Gödel de 2006 por este trabalho.

O algoritmo, que foi agora melhorado por outros, determina se um número é primo ou composto e roda em tempo polinomial.

Importância

O significado principal do AKS é que ele é o primeiro algoritmo publicado para ser simultaneamente polinomial, determinístico, e incondicional. O que isto significa, o tempo máximo de processamento do algoritmo pode ser expresso como um polinômio em relação ao número de dígitos no número objetivo, isto nos permite classificar o número informado como primo ou composto (ao invés de retornar um resultado probabilístico); e a sua correção não esta subordinada a exatidão de uma hipótese subsidiária não provada (tal como a hipótese de Riemann).

Bases do teste

O teste de primalidade AKS é baseado na equivalência:

(xa)n(xna)(modn)

A qual é verdadeira somente se n é primo. Isto é uma generalização do pequeno teorema de Fermat estendido para polinômios e pode ser facilmente provado usando o teorema binomial juntamente com o fato que: :(nk)0(modn) para todo 0 < k < n se n é primo.

Enquanto esta inequação constitui um teste de primalidade por si só, verificando isto em tempo exponencial. Além disto AKS faz uso da relação de equivalência:

(xa)n(xna)(modn,xr1)

a qual pode ser verificada em tempo polinomial. Contudo enquanto todos os primos satisfazem esta equivalência alguns números compostos também o fazem. A prova da correção consiste em mostrar que existe um conveniente menor r e um conveniente conjunto menor de inteiros A tal que se a equivalência que assegura que para todo a em A então n deva ser primo.

O algoritmo para o teste de primalidade de algum inteiro n consiste de duas partes. O primeiro passo gira em torno de encontrar um número primo conveniente r=kq+1, tal que:

  • P(r1)=q onde P(x) é o maior fator primo de x,
  • q4rlog2(n),
  • nk≢1(modr).

Durante este passo, é importante confirmar que n não é divisível por nenhum primo pr; Se ele é divisível, o algoritmo poderá terminar imediatamente para avisar que n é composto.

No segundo passo, um número de teste são feitos em um corpo finito GF(nr), no caso de testar a equivalência de dois polinômios no campo: se :(xa)n(xna)(modn,xr1) Para todos os inteiros positivos a com :a2rlog2(n), então n é garantidamente primo. Em todos os outros casos ele é composto.

Como em qualquer tipo algoritmo, o estudo em si se preocupa em estabelece dois fatos: provar que o algoritmo esta correto, e estabelecer sue tempo de complexidade assintótico. Isto pode ser encontrado e estabelecido em um limite superior da sua magnitude, e depois pela demonstração que o teste de equidade múltiplo na segunda parte do algoritmo ce suficiente para garantir se n é primo ou composto.

Desde o tempo de processamento de ambas as partes do algoritmo é inteiramente dependente da magnitude de r, provando um limite superior de r foi suficiente para mostrar que o tempo de complexidade assintótico do algoritmo é O(log12+ϵ(n)), onde ε é um número pequeno. Em outras palavras, o algoritmo leva menos que uma constante vezes a décima segunda potência (mais ε) do número de dígitos de n.

Contudo o limite superior provado no trabalho é bastante folgado; isto é, um tanto conservador a cerca da distribuição dos números primos de Sophie Germain exibe, se verdadeiro, imediatamente reduziria o pior caso para O(log6+ϵ(n)).

Nos meses seguintes a descobertas de novas variantes apareceram (Lenstra 2002, Pomerance 2002, Berrizbeitia 2003, Cheng 2003, Bernstein 2003a/b, Lenstra and Pomerance 2003) as quais melhoraram a velocidades do AKS em várias ordens de magnetude. Devido a existência de muitas variantes, Crandall e Papadopoulos referem-se a classe-AKS de algoritmos em seu trabalhos científico "On the implementation of AKS-class primality tests" publicado em Março de 2003.

Algoritmo

Verificar se um número N é composto ou primoPredefinição:Ref:


Introduzir: Inteiro n > 1

SE (n ESTÁ NA FORMA a^b COM b > 1) ENTÃO mostrar "COMPOSTO"

r := 2
while (r < n) {
    SE (Mdc(n,r) NÃO É 1) ENTÃO mostrar "COMPOSTO"
    SE (r É UM Nº PRIMO MAIOR QUE 2) ENTÃO {
        q = MAIOR FACTOR DE r-1
        SE (q > 4sqrt(r)log n) e (n(r-1)/q NÃO É IGUAL A 1(mod r)) ENTÃO SAIR DESTE CICLO(BREAK)
    }
    r := r+1
}

PARA a = 1  TO 2sqrt(r)log n {
    SE ( (x-a)^n  NÃO É  (x^n-a) (mod x^r-1,n) ) ENTÃO mostrar "COMPOSTO"
}

mostrar ¨PRIMO¨

Um teste elementar e preciso de primalidade

Sabe-se que, com exceção dos números 2 e 3, todos os outros números primos são expressos pela fórmula Ip=6K±1 mas se sabe também que a imensa maioria dos números expresso pela fórmula Ip=6K±1 não são primos.

Os números compostos da forma Ip=6K±1 são obtidos pela multiplicação de dois números da forma Ip=6K±1onde estes dois números podem ser ambos primos ou ambos compostos e também ser o produto de um número primo por um número compostos como vemos abaixo:

6K±1=(6K2±1).(6K3±1)=6.6K2.K3±6K2.1±6K3.1±1que podemos escrever

6K±1=6(6K2.6K3K2±K3)±1

Vemos então que esta igualdade só existe se

K=6K2K3±K2±K3

Se esta igualdade não existir para sinais iguais ou diferentes, então o par de números 6K±1 não existe como números compostos, logo o par de números 6K±1 serão números primos gêmeos.


Então dado um número qualquer K inteiro,positivo, se não ocorrer nenhum par de números inteiros positivos K2,K3 que satisfaça a igualdade acima, afirma-se que os números Ip=6K±1 são primos gêmeos.

Se não ocorrer nenhum par de números K2,K3 com sinais iguais que satisfaça a igualdade e ocorrer ao menos um par de números K2,K3 com sinais diferentes que satisfaça a igualdade para um determinado valor de K afirma-se que Ip=6K+1 é primo e Ip=6K1 não é primo.

Se não ocorrer nenhum par de números K2,K3 com sinais diferentes que satisfaça a igualdade e ocorrer ao menos um par de números K2,K3 com sinais iguais que satisfaça a igualdade para um determinado valor de K afirma-se que Ip=6K1 é primo e Ip=6K+1 não é primo.

Referências

  1. Predefinição:NoteManindra Agrawal, Neeraj Kayal, Nitin Saxena, "PRIMES is in P", Annals of Mathematics 160 (2004), no. 2, pp. 781–793.
  2. Predefinição:NoteH. W. Lenstra, Jr. and Carl Pomerance, "Primality Testing with Gaussian Periods", preliminary version July 20, 2005.
  3. Predefinição:Note Bruno da Rocha Braga, "Implementando o Algoritmo AKS para Primalidade de um Número em Tempo Polinomial", laboratório Ravel/Coppe/UFRJ, 11 de setembro de 2002.

Ligações externas

Predefinição:Portal3 Predefinição:Teoria dos números