Académique Documents
Professionnel Documents
Culture Documents
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 (
ir crescer de forma
suficientemente parecida com outro 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 (
)
(
) , 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 =
, ento
( )
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
)(
) Como p primo e p | (
), ento ou p | (
) ou p
|(
) 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
( )
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 ( )
, 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
temos p -1.
Desta forma, o AKS considera a seguinte congruncia:
( )
)((
)) onde ((
)) representa aplicar
(
. O que no bvio
que a nova congruncia sempre falsa quando n composto, pois mesmo quando
( )
( ) 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
)(
), 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> .