Vous êtes sur la page 1sur 11

Universidade Catlica de Pernambuco-UNICAP

CCT-Centro de Cincias e Tecnologia








Teste de primalidade:
Anlise do algoritmo de Miller Rabin.





Alunos: Everton Catanho
Itzah S
Mauricio Senna
Roberto
Kleber William
Professor: Robson Lins

Recife, 07 de novembro de 2013


Analise dos Algoritmos de Miller-Rabin.

Everton Catanho
everton_catanho@hotmail.com

Itzah S
Itzah.maeva@outlook.com

Mauricio Senna
mauriciofmsenna@hotmail.com

Kleber William
kleberwilliam@gmail.com

Roberto Lima
robertodljr@gmail.com






























Resumo

Os algoritmos para determinao de primalidade so classificados em duas
classes de mtodos: os determinsticos e os probabilsticos. Em geral, os algoritmos
probabilsticos so de tempo polinomial enquanto que os determinsticos so de tempo
exponencial. O AKS o primeiro algoritmo determinstico a executar este teste em
tempo polinomial.
Este trabalho faz uma anlise entre o mtodo AKS e o mtodo Miller-Rabin, que
um dos mtodos probabilsticos mais utilizados. Para isto, foi feita implementao na
linguagem do Maple para a anlise da comparao do desempenho de cada algoritmo.





































Introduo

Comprovar a primalidade de um nmero natural significa comprovar que este
nmero s admite como divisores positivos ele prprio e o nmero um. Os nmeros que
no so primos so conhecidos como nmeros compostos. Todo nmero composto pode
ser escrito de forma nica (a menos da ordem dos fatores) como o produto finito de
nmeros primos. Com isto pode-se dizer que os nmeros primos formam uma base para
a construo dos nmeros inteiros. Este fato justifica o porqu dos nmeros primos
serem objeto de estudo desde a antigidade at os tempos atuais. Testar a primalidade
com nmeros pequenos, at que a tarefa no das mais complicadas, mas medida que
os nmeros se tornam maiores, a comprovao da primalidade tornar-se muito
problemtica. Isto se deve ao fato de no se conhecer um procedimento de gerao de
nmeros primos.
A importncia dos testes de primalidade se deve principalmente aos sistemas de
criptografia, onde existe uma necessidade de gerar nmeros primos com ordem de
grandeza acima de 100 dgitos, que vital para a segurana dos criptosistemas. Os
primeiros algoritmos criados para testar a primalidade de um nmero remontam
Grcia antiga. At 2002, os principais algoritmos desenvolvidos eram enquadrados em
duas grandes classes. (BRAGA, 2002):
De tempo no-polinomial e determinsticos: Afirmam com 100% de certeza a
primalidade de um nmero, mas o clculo realizado em tempo exponencial.
Exemplos: Crivo de Eratstenes e Adleman- Rumely, que apresentam tempo de
execuo da ordem de ()
( )
.
De tempo polinomial, mas no-determinsticos: A complexidade do algoritmo
em funo de um polinmio. O tempo de clculo no 'explode' quando o
nmero testado muito grande, mas no do certeza absoluta quanto
primalidade. Exemplos: Teste de MILLER-RABIN.
Entretanto no final de 2002, um professor indiano, Manindra Agrawal, e seus
dois alunos, Neeraj Kayal e Nitin Saxena, descobriram um algoritmo que est sendo
chamado de AKS (iniciais de seus nomes), que permite verificar, sem margem de erro,
se um inteiro positivo ou no primo, em tempo polinomial.
Neste trabalho se faz uma anlise dos testes probabilsticos e os determinsticos, onde
so abordados dois testes para anlise comparativa: o Testes de Miller-Rabin, que um
teste probabilstico pertencente famlia Teste de Monte Carlo, com margem de erro
muito pequena, da ordem de10-24, e o Teste do AKS, que determinstico e de tempo
polinomial.



Nmeros Primos

Nmeros primos so aqueles inteiros tal que no divisvel por
qualquer outro nmero natural positivo alm de 1 e o prprio . Uma definio mais
rigorosa cita que um nmero primo se possui apenas e exatamente dois divisores
distintos, desta forma, o nmero 1 no primo. Nmeros inteiros que possuem
divisores diferentes de so chamados nmeros compostos. Devido ao
Teorema Fundamental da Aritmtica, os primos so tambm conhecidos como os
blocos bsicos dos inteiros, dado que qualquer inteiro pode ser escrito como o produto
de primos.O teorema fundamental da aritmtica outro motivo para o nmero 1 no ser
primo, dado que este teorema define que existe apenas uma decomposio prima para
qualquer nmero, o que seria falso caso 1 fosse primo (o nmero 2 poderia ser escrito
como (2), (2 x 1), (2 x 1 x 1), por exemplo).
Vrias tentativas de encontrar caractersticas comuns aos primos foram
realizadas ao longo do tempo. A maioria delas, no entanto levou a resultados que
realmente so propriedades vlidas para todos os primos, mas que alguns compostos
tambm possuem. Estes nmeros compostos que possuem alguma caracterstica em
comum com os primos so chamados de pseudoprimos. Existem algumas classes
famosas, como os pseudoprimos de Fermat, que so aqueles nmeros compostos que
satisfazem o pequeno teorema de Fermat em alguma base e os nmeros de Carmichael,
que so aqueles compostos que satisfazem o pequeno teorema de Fermat para qualquer
base.
Tambm existem algumas propriedades que so vlidas apenas para alguns
primos. Estas caractersticas definem subconjuntos dentro dos primos, que podem ser
muito teis. Os nmeros de Mersenne, por exemplo, so aqueles na forma

, onde um inteiro. Os primos de Mersenne so os nmeros primos que satisfazem


esta formula. Uma caracterstica importante dos primos de Mersenne, que quando


primo, ento deve ser tambm primo. De acordo com, apesar de serem conhecidos
poucos primos de Mersenne at o momento, existem algoritmos suficientemente
eficientes em encontrar primos de Mersenne grandes, e isto est diretamente relacionado
a esta ltima caracterstica citada. Atualmente, dos 10 maiores primos conhecidos, nove
so nmeros de Mersenne.
Existem tambm os certificados de primalidade, que so informaes geradas
por alguns algoritmos de teste de primalidade que no rodam em tempo polinomial, que
permitem que um primo previamente testado seja certificado como primo em tempo
polinomial, sem a necessidade de rodar novamente todo o algoritmo. Hoje, com a
existncia do algoritmo AKS, estes certificados podem ser considerados de pouco valor,
visto que o prprio nmero primo seu certificado, dado que pode ser testado em tempo
polinomial. Um conceito relacionado aos nmeros primos so os coprimos, ou nmeros
mutuamente primos. Os nmeros inteiros de um conjunto de tamanho maior ou igual a 2
so considerados coprimos se seu mximo divisor comum 1. Obviamente, um primo
coprimo em relao a qualquer outro primo. Para conjuntos com apenas nmeros
compostos, ou nmeros compostos e nmeros primos misturados, deve-se verificar o
mximo divisor comum (mdc) para poder classificar os nmeros como coprimos ou
no. Outro conceito o de nmeros coprimos dois a dois, ou primos entre si. Neste
caso, no basta que o mdc do conjunto seja 1. necessrio que o mdc de cada possvel
dupla de elementos do conjunto tambm seja igual a 1. Por exemplo, o conjunto {4,6,7
coprimo, pois mdc(4,6,7) = 1. Este mesmo conjunto, no entanto no coprimo dois a
dois, pois mdc(4,6) = 2.

Complexidade Computacional

Com o surgimento dos computadores, a percepo do custo, ou seja, da
quantidade de tempo e/ou espao necessrios para a resoluo de um problema em uma
mquina se tornou essencial. Atravs do clculo do custo possvel determinar
aproximadamente a quantidade de recursos necessria quando o tamanho da entrada
cresce. Este custo a complexidade computacional para a resoluo de um problema.
Para representar a complexidade, utiliza-se uma funo sobre o tamanho da entrada.
Dependendo do custo de um problema, pode ser vivel ou no resolv-lo, ou seja, caso
a funo tenha uma taxa de crescimento muito alta, uma instncia relativamente
pequena do problema pode necessitar de uma quantidade de recursos que inviabilize o
clculo de uma resposta. Por exemplo, necessitar de vrios milnios ou de alguns
Yottabytes (

) para oferecer a soluo.


O que define a pertinncia de um problema a uma classe de complexidade a
existncia de uma soluo de custo compatvel com a classe em questo. Cada classe
descreve de maneira geral quo vivel a melhor soluo existente para este problema.
Aqueles que podem ser resolvidos em tempo polinomial em uma mquina de Turing
determinstica so classificados como pertencentes classe P e so conhecidos como
problemas tratveis ou para os quais se conhece uma soluo eficiente.
Uma soluo para um problema descrita por uma sequncia finita de passos. Esta
sequncia denominada como um algoritmo para o respectivo problema. Um algoritmo
computacional uma estratgia de resoluo que executa em uma mquina de Turing
fazendo-a parar em um estado final, que descreve a resposta.
A anlise da complexidade de um algoritmo no necessita geralmente explicitar
a exata funo que descreve o seu custo. Como foi deixada implcita anteriormente, a
informao que esta funo deve passar que, para uma entrada de tamanho _
suficientemente grande, um algoritmo ir se comportar de uma determinada maneira.
Desta forma, o algoritmo descrito pela funo ()

ir crescer de forma
suficientemente parecida com outro de custo ()

ou mesmo com outro


algoritmo de custo ()

.
Para representar este comportamento assinttico, comum utilizar a notao
Big-O. Em resumo, esta notao ignora as constantes aditivas e multiplicativas e termos
de menor grau em detrimento do termo que apresenta o maior expoente, de forma que
represente um limitante superior para o custo do algoritmo. Desta forma, possvel
comparar os algoritmos independentemente do tamanho da entrada, pois medida que
esta cresce, a quantidade de recursos necessria ir crescer de maneira similar para
algoritmos de custo representado de forma idntica pela notao Big-O. Assim, pode-se
dizer, por exemplo, que os custos dos algoritmos definidos pelas trs funes do
pargrafo anterior possuem (

), onde o tamanho da entrada.


A notao Big-O representa um limite superior, logo, pode-se dizer que se
(), o valor cresce na mesma medida que a raiz quadrada de , mas no
necessariamente igual a , pois como dito anteriormente, a notao Big-O pode
ocultar alguma constante ou termo de menor grau. Outra notao importante no
contexto de testes de primalidade a Soft-O, escrita pela forma (()) Atravs desta
notao possvel ocultar termos multiplicativos logartmicos, logo, (

)
(

) , ou(

) (

).



Teste de Miller-Rabin

Com teste de Miller-Rabin inaugurou a classe de testes probabilsticos chamada de Testes
deMonte Carlo. Estes testes so usados largamente na maioria das funes de teste de
primalidade presentes nos softwares matemticos, dada a sua velocidade e o grau de
confiabilidade. De fato, o esse algoritmo no verifica a primalidade de um nmero, a nica
coisa que ele detecta com segurana se o nmero composto. (COUTINHO, 2003). Ele
faz um teste, que verifica se o nmero composto. Caso o teste seja falho existe a
probabilidade de 75% de o nmero ser primo. Aplica-se novamente o teste e se este for
falho a probabilidade do nmero ser primo passa a ser 93%. (MARTINEZ e CAMPOS,
2004). O procedimento pode ser repetido e na quinta interao tem-se uma probabilidade
aproximada de 99.9% do nmero ser primo. Se o nmero passar no teste, ele composto.
importante dizer que o teste Miller-Rabin, como s vezes tambm chamado, no d
indcios sobre a fatorao prima do nmero n. O algoritmo tem como base o resultado do
seguinte teorema:
Teorema 4.1 Seja p mpar e p 1 =

com q mpar e k >1. Se p primo

, ento

1(mod n) ou existe um ie{0,1,..., k 1} tal que

( )
Demonstrao: Consideremos a seguinte sequencia de potencias mdulo p


Se p for um nmero primo, ento pelo menos uma destas potncias tem que ser congruente
a 1 modulo p , pois, pelo (Teorema 2.1), temos:

1(mod p).
Seja i >1 o menor expoente tal que

1 (mod p) . Podemos escrever

)(

) Como p primo e p | (

), ento ou p | (

) ou p
|(

). Sendo i o menor expoente tal que (

) divisvel por , (

)
no divisvel por p . Segue que p divide (

), isto ,

().

Concludo que se p primo, ento uma das potncias da sequncia dada tem que ser
congruente a 1(mod p) quando i > 1. Agora, se i = 0 ento aq 1(mod p) e a esta
congruncia no podemos aplicar o produto notvel, pois q mpar.
Portanto, se p primo, ento uma das potncias da sequncia congruente a 1 mdulo p
ou aq 1(mod p)
Se os primos se destinarem para o uso "industrial" (por exemplo, para a encriptao RSA),
geralmente no necessrio provar sua primalidade. suficiente saber que a probabilidade
do nmero ser composto menor do que 10 24%. Neste caso, podem-se utilizar os testes
(fortes) de primalidade provvel.


Algoritmo Miller-Rabin
1. escolha ae{1,..., p 1} aleatrio
2. escreva p 1 = 2t q, q mpar
3. calcule sucessivamente

( )

( )

( )

( )
4. se

( )retorne COMPOSTO
5. seno k = 0 ento retorne PRIMO
6. seno

( )ento retorne COMPOSTO


7. seno retorne PRIMO




Algoritmo AKS

O algoritmo AKS ganhou destaque por ser o primeiro algoritmo publicado que
simultaneamente polinomial, determinstico, e incondicional. O que isto significa, o
tempo mximo de processamento do algoritmo pode ser expresso como um polinmio
em relao ao nmero de dgitos do nmero analisado. Isto permite classificar o nmero
informado como primo ou composto ao invs de retornar um resultado probabilstico. O
ponto chave do algoritmo tem como base o seguinte Teorema:
Teorema 3.1 Suponha que

. Ento p >1 primo se: ( )

( )

Demonstrao: Pelo Teorema Binomial de Newton, temos que:
( )


Mas nos casos em que j diferente de 1 e p , o coeficiente binomial (

) divisvel por
p, logo todos os termos intermedirios desta expanso so divisveis por p , ou seja, so
congruentes a zero modulo p .
Assim
( )

( )
Onde na ltima congruncia devida ao PTF. Desta forma obtm-se o seguinte critrio
de primalidade p primo ( )

( ) para todo a < p


O conceito bsico do algoritmo AKS a congruncia do Teorema 3.1. Analisando a
expanso binomial inteira de( )

, ou seja, os temos (

) com e p ,pode-se
determinar se p primo, pois caso todos os termos da expanso com j =1,...p -1 forem
divisveis por p , ento p seria primo, caso contrrio teramos p composto. Pode-se
verificar esta propriedade no Triangulo de Pascal, onde cada linha representa os
coeficientes da expanso binomial.

Triangulo de Pascal
0: 1
1: 1 1
2: 1 2 1
3: 1 3 3 1
4: 1 4 6 4 1
5: 1 5 10 10 5 1
6: 1 6 15 20 15 6 1
7: 1 7 21 35 35 21 7 1
8: 1 8 28 56 70 56 28 8 1
9: 1 9 36 84 126 126 84 36 9 1
10: 1 10 45 120 210 252 210 120 45 10 1

Para p muito grande este tipo de teste impraticvel e o AKS implementa o teste,
descrito a seguir. A idia do AKS tornar o teste binomial rpido e ainda ser capaz de
provar que o teste responde corretamente mesmo quando p composto. Ao invs de
trabalharmos com mdulo p , trabalhamos com mdulo um polinmio

(onde r
um primo razoavelmente pequeno). Ou seja, no lugar de calcular( )

, calcula-se o
resto da diviso de ( )

por

, que feito usando o mesmo mtodo em


lgebra para dividir um polinmio por outro. Dessa maneira, teremos no mximo r -1
termos para examinar, enquanto que na expanso de temos( )

temos p -1.
Desta forma, o AKS considera a seguinte congruncia:
( )

)((

)) onde ((

)) representa aplicar
(

) e ao resultado aplicar (mod p). Como a congruncia original satisfeita


sempre que p primo, ento se tem que a congruncia, tambm satisfeita quando p
primo. A justificativa que quando duas expresses so iguais, apresentam o mesmo
resto quando se dividem essas duas expresses por

. O que no bvio
que a nova congruncia sempre falsa quando n composto, pois mesmo quando
( )

)( ) possvel que dois diferentes polinmios tenham o


mesmo resto quando divididos por

O que o AKS mostra que se p composto,


e se for escolhido o valor de r , que satisfaz as condies
()

( ) onde q o maior fator primo de r -1. Desta forma basta testar apenas um
nmero pequeno de a at encontrarmos um, tal que ( )

)(

)
Uma vez que se encontra um valor de a que satisfaz a relao acima, prova-se que p
composto. O valor de a deve estar no intervalo entre 1 e , (BRAGA, 2002).

Algoritmo AKS
1. Entrada p >1
2. Se

com b >1, retorna COMPOSTO


3.
4. Enquanto (r < p){
5. Se mdc( ) , retorna COMPOSTO
6. Se r primo{
7. Encontre q o maior divisor primo de r -1
8. Se q > e
()
1(mod r) vai para 10.}
9. }
10. Para a =1 at faa
11. Se ( )

)(

), retoma COMPOSTO
12. retorna PRIMO

Os passos do algoritmo, numerados de um a nove, usam alguns conceitos algbricos que
descartam valores que no influenciam na determinao da primalidade. No passo dois
verifica-se, se n uma potncia de um nmero inteiro. Isto feito por um algoritmo em
tempo polinomial.
Nos passos de trs a nove procura-se os valores de r e q que satisfaam as condies.
Nos passos dez e onze verifica-se a existncia de um valor de a que no satisfaa a
condio retornando que o nmero composto. Caso contrrio tem-se que o nmero p
primo.










Concluso

Como foi possvel observar durante a realizao desta pesquisa, o problema de
decidir se um dado nmero ou no primo foi alvo constante de estudos, e mesmo aps
o desenvolvimento de um algoritmo polinomial e determinstico para resolv-lo, os
esforos continuaram no sentido de melhorar sua eficincia e utilizar este novo
algoritmo como um modelo para novos testes. O custo ainda alto do algoritmo AKS e
de suas variaes faz com que na prtica, os testes probabilsticos como Miller-Rabin
continuem dominando as aplicaes. Pesquisas continuam sendo desenvolvidas em
busca de algoritmos que possam reduzir ainda mais o custo das solues para PRIMO e
talvez tornar um algoritmo determinstico e polinomial uma escolha mais atraente para
fins prticos.
vlido lembrar tambm que alm de melhorias e variaes baseadas no teste
AKS, outras linhas de pesquisa podem causar o surgimento de tal algoritmo, tal como a
comprovao da Hiptese Estendida de Riemann, que tornaria o teste de Miller
polinomial e determinstico. A Ferramenta de Comparao desenvolvida confirma a
superioridade prtica dos algoritmos amplamente usados em relao ao AKS, e atravs
da visualizao dos grficos gerados pelo software, fica bem claro que mesmo tendo
custo assintoticamente menor do que a Diviso por Tentativa, por exemplo, o teste AKS
na prtica mais lento do que o mtodo de fora bruta para valores relativamente
grandes.
Pretende-se melhorar o software desenvolvido aps a concluso deste trabalho.
A incluso do projeto da ferramenta em uma rede de projetos open-source como o
CodePlex tem como objetivos tanto a disseminao do conhecimento atravs do cdigo
como a prospeco de possveis colaboradores que possam melhorar a ferramenta. As
principais melhorias que o autor deseja realizar na ferramenta so:
Utilizao de threads para executar os algoritmos para melhorar a usabilidade,
no deixando a aparncia de que a aplicao est travada, enquanto ela est na
realidade executando os algoritmos;
Desenvolvimento de verses que faam uso de processamento em paralelo de
algoritmos que permitam este tipo de processamento, como o mtodo da Diviso
por Tentativa e o prprio AKS, cuja etapa final presente em todos os algoritmos
baseados em AKS pode ser dividido entre vrios processadores
Uso de alguma biblioteca que permita trabalhar com nmeros no-inteiros
arbitrariamente grandes, permitindo que a implementao de AKS possa testar
inteiros de tamanho maior do que a implementao atual admite.
Alm de melhorias na ferramenta, pretende-se estudar a combinao de testes de
primalidade j conhecidos, com o objetivo de desenvolver um novo algoritmo
como B-PSW ou ECPP+AKS, que possa ter alguma vantagem prtica ou terica
sobre os testes atualmente conhecidos.










Bibliografia

BRAGA, da R. B, Algoritmo AKS primalidade de um numero em tempo
polinomial, UFRJ artigo de concluso de curso, 11 de setembro, 2002.

COUTINHO, S. C. Uma introduo ao algoritmo AKS, Coleo Iniciao cientifica,
Sociedade brasileira de matemtica. 2003.

CRANDALL, R. e PAPADOPOULOS, J. On the implementation of AKS-class
primality test, Advanced Computation Group. Apple Computer e University of
Maryland College Park. 2003.

MARTINEZ, E. B. F e CAMPOS, M. T, Algoritmo AKS para verificao de
primalidade em tempo polinomial, 2004, <
http://www.cic.unb.br/~pedro/trabs/primal.htm >.

SANTOS, P. NETO, R. X. e ENOQUE T. Uma tentativa de implementao do
algoritmo de primalidade AKS. 2002, Disponvel em
<http://www.cic.unb.br/~pedro/trabs/primal.htm> .

Vous aimerez peut-être aussi