Você está na página 1de 9

Aula 9 Teste de Primalidade de Fermat Uma questo importante em Teoria dos Nmeros e que tem interessantes aplicaes em criptografia

a a questo de decidir se um dado inteiro ou no primo. Testes que permitem tal deciso so chamados testes de primalidade. O pequeno teorema de Fermat, estudado na aula passada, d origem a um teste de primalidade bastante til.

Texto 36 - Testes de Primalidade O teste de primalidade um algoritmo que determina se um dado nmero inteiro um primo. importante notar que este um problema diferente e mais simples que o de fatorar um inteiro. Na aula anterior, vimos o mtodo simples que consiste em dividir um inteiro n por todos os primos menores ou iguais a primo. Este um teste determinstico, ou seja, que determina com certeza se o inteiro dado primo ou no. No entanto, prtico apenas para inteiros pequenos ou inteiros que sejam divisveis por um primo pequeno. Em criptografia, por exemplo, onde lidamos com inteiros bastante grandes, este teste simples de pouca utilidade. Alm dos testes determinsticos, existem os probabilsticos, que so os testes que podem provar que um nmero composto, mas podem indicar, apenas com certa probabilidade, que um inteiro primo. Os testes probabilsticos so muito utilizados por serem mais rpidos que os testes determinsticos. Alm disso, testes probabilsticos modernos, como o de Rabin-Miller, so extremamente eficientes, no sentido de que, se um inteiro passar em vrias execues do teste, h grande probabilidade de ele ser primo. Vamos iniciar a aula apresentando um teste probabilstico simples, derivado do teorema de Fermat.

n . Caso nenhum destes primos seja divisor de n , ento n

Texto 37 Teste de Fermat O teorema de Fermat d origem a um teste de primalidade probabilstico muito interessante, chamado teste de Fermat. Demonstrao. Seja n um inteiro cuja primalidade queremos determinar. Pelo teorema de Fermat, se

n primo, ento a n 110 mod n para todo a , tal que mdc a , n =1 .


1. Escolhemos uma base a (geralmente um nmero primo pequeno), tal que

mdc a , n =1 .
2. Testamos se a n 110 mod n . 3. Se no vale a n 110 mod n , ento n no primo e dizemos que a base a testemunha de que n composto. 4. Se a n 110 mod n , ento n passou no teste para a base a . Se um inteiro n composto, mas passa no teste de Fermat para a base a , dizemos que

n pseudoprimo de Fermat para base a . Por exemplo, o nmero 341 pseudoprimo


para a base 2 , pois 2340 1 mod 341 , mas 341=1131 composto. Na verdade,

341 o menor pseudoprimo para a base 2 .


A existncia de pseudoprimos atesta que o teste de Fermat no determinstico. Mas pseudoprimos so raros. Por exemplo, h apenas trs pseudoprimos para a base 2 menores que mil: os inteiros 341 , 561 e 645 . H apenas 245 pseudoprimos para a base 2 entre 1 e um milho. Podemos aumentar ainda mais a eficcia do teste de Fermat, aplicando-o repetidamente e usando vrias bases. O nmero 341 , por exemplo, no passa no teste para a base 3 , porque 3340 56 mod 341 . Portanto 3 testemunha de que 341 composto.

O uso de duas bases aumenta a eficcia do teste de Fermat. Veja: Entre 1 e 105 , por exemplo, h apenas 23 pseudoprimos para as bases 2 e 3 . Entre 1 e 2,5109 existem 4.709 pseudoprimos para as bases 2 e 3 .

Ao adicionar a base 5 , restam apenas 2.552 pseudoprimos no mesmo intervalo. J, ao acrescentar a base 7 , sobram apenas 1.770 pseudoprimos at 2,5109 .

A expresso pseudoprimo utilizada com significados diferentes nas referncias. Alguns autores chamam de pseudoprimo qualquer inteiro (primo ou no) que passe no teste de Fermat. Aqui estamos definindo pseudoprimo como um inteiro composto mpar que passe nesse teste. Pseudoprimos para a base 2 recebem tambm o nome de nmeros de Poulet.

A expresso pseudoprimo tambm utilizada para designar um inteiro composto que passa em um teste probabilstico. Por exemplo, um pseudoprimo de Euler um composto que passa no teste de Euler. H tambm pseudoprimos de Lucas, pseudoprimos fortes etc. A raridade dos pseudoprimos tem aplicaes prticas importantes na criptografia RSA, em que, como vamos estudar, deve-se escolher um inteiro que seja produto de dois primos grandes.

O algoritmo usual para gerar primos grandes escolher um inteiro mpar grande e testar se primo. Caso no seja, escolhemos arbitrariamente outro mpar, ou somamos 2 ao mpar anterior, e testamos novamente.

Para que seja eficiente, este algoritmo de gerao de primos depende de testes de primalidade rpidos, pois os algoritmos determinsticos so lentos. Muitas vezes prefervel tolerar uma possibilidade muito pequena de usar um pseudoprimo e utilizar testes muito mais rpidos e simples.

A tabela a seguir mostra o menor pseudoprimo para as bases entre 2 e 20. Uma tabela semelhante, mas para bases at 200, pode ser encontrada no website da Wikipedia (disponvel em http://en.wikipedia.org/wiki/Pseudoprime).

Inteiro a

Menor pseudoprimo para a base a

Inteiro a

Menor pseudoprimo para a base a

11 15=3 5 2 341=11 13 3 91=7 13 4 15=3 5 5 124=2 31 6 35=5 7 7 25=5 8 9=3


2 2
2

12 65=5 13 13 21=3 7 14 15=3 5 15 341=11 13 16 51=3 17 17 45=3 5 18 25=5


2 2
2

9 28=2 7 10 33=3 11

19 45=3 5 20 21=3 7

Texto 38 - Nmeros de Carmichael Neste ponto, pode parecer que a soluo para evitar os pseudoprimos seria utilizar muitas bases diferentes. Como vimos anteriomente, ao usar apenas as bases 2, 3, 5 e 7, restam apenas

1.770 pseudoprimos entre 1 e 2,5109 . Usando mais bases, teremos ainda menos
pseudoprimos. Testar para diversas bases um procedimento utilizado, mas no suficiente para garantir primalidade. O fato que h inteiros que enganam o teste de Fermat para todas as bases. Um nmero de Carmichael um inteiro positivo composto n que satisfaz a congruncia

b n 1 1 mod n para todos os inteiros b co-primos com n . Ele recebe esse nome em
homenagem ao matemtico americano Robert Carmichael (1879-1967). Portanto nmeros de Carmichael so pseudoprimos de Fermat para todas as bases. Por isso, so algumas vezes chamados de pseudoprimos absolutos. Uma caracterizao para os nmeros de Carmichael dada pelo teorema de Korselt, de 1899.

Teorema (Korselt): Um inteiro positivo composto n um nmero de Carmichael se, e somente se, todo fator primo p de n satisfaz as duas condies a seguir: 1. p 2 no divide n. 2. p 1 divide n 1 . Korselt observou essas propriedades, mas no conseguiu encontrar um exemplo de tal nmero. O primeiro exemplo foi descoberto em 1910 por Robert Carmichael, que observou que o nmero

510 atende s condies do teorema, pois 561=31117 livre de quadrados. E vale que:

2 560, 10 560 e 16 560.


O nmero 561 o menor nmero de Carmichael. Os prximos seis nmeros de Carmichael so:

1105=5 13 17 1729=7 13 19 2465=5 17 29 2821=7 13 31 6601=7 23 41 8911=7 19 67

4 6 4 6 6 6

1104,12 1728, 12 2464,16 2820, 12 6600,22 8910, 18

1104, 16 1728,18 2464, 28 2820,30 6600, 40 8910,66

1104 1728 2464 2820 6600 8910

Os nmeros de Carmichael no seriam um problema to grande para o teste de Fermat, se houvesse apenas um nmero finito deles. O problema de existirem infinitos nmeros de Carmichael permaneceu em aberto por bastante tempo at que, em 1994, os matemticos William Alford, Andrew Granville e Carl Pomerance provaram que h infinitos nmeros de Carmichael. Todos os nmeros de Carmichael listados anteriormente tm trs fatores primos. O nmero desse tipo com quatro fatores primos 41041=7 11 13 41 . Demonstrao do teorema de Korselt A prova completa do teorema de Korselt depende de alguns resultados que no sero estudados nesta demonstrao. Voc pode encontr-los em Coutinho (1997). Vamos provar aqui metade do teorema e comprovar que um inteiro que satisfaz as duas

condies do teorema um nmero de Carmichael. Seja n um inteiro que satisfaz as condies 1 e 2. Seja b inteiro co-primo com n . Se

p um fator primo de n , ento p b . Pelo teorema de Fermat, b p 11 mod p .


Como, por hiptese,

p 1

n 1 , temos que n 1= p 1 q para algum inteiro positivo

q . Portanto

b p 11 mod p b p 1 1 mod p b n 11 mod p .


Assim, para todo primo p divisor de n , temos b n 1 1

mod p .

Observe agora que a fatorao de n da forma n = p 1p 2 p k , em que todos os primos distintos p 1 , p 2 ,

, p k tm expoente 1, pela condio 1 do teorema ( p 2 n ). i


n 1

Como provamos que b

1 mod p i

para todo primo p i que divide n , segue-se que

b n 1 1 mltiplo de todos os p i , logo mltiplo de n = p 1p 2 p k , ou seja,

b n 1 10 mod n b n 1 1 mod n .
O inteiro n , portanto, um nmero de Carmichael.

Texto 39 Teste de Miller-Rabin O teste de primalidade de Miller-Rabin um teste probabilstico criado em 1976 por G.L. Miller e modificado por M.O. Rabin. O teste uma pequena modificao do teste de Fermat, sendo bem mais eficiente que este, ainda que permanea uma pequena chance de erro. Seja n um inteiro positivo mpar cuja primalidade queremos testar. O inteiro n 1 par. Seja

s a maior potncia de 2 que divide n 1 , isto ,

n 1=2 sd , onde d mpar.


Seja 1 b de b :

n 1 um inteiro que servir de base para o teste. Considere as seguintes potncias


b d , b 2d , b 2
2d

, b2

s 1 d

, b2

s 1 d

Se n for um nmero primo, ento a ltima desta potncia congruente a 1 mdulo n , pois, pelo teorema de Fermat,
s

b 2 d = b n 11 mod n .
Talvez alguma potncia anterior a essa seja congruente a 1 mdulo n . Seja k o menor expoente tal que b 2
k

1 mod n , isto , tal que n divide b 2


d

1 .

Se k =0 , ento b 2 podemos fatorar b 2


k

1 mod n b d 1 mod n . Caso contrrio, se k

0 , ento

1 como
k k 1 k 1

b2
Como n primo e divide b 2

1= b 2

1 b 2

1 .

1 , ento divide um dos dois fatores direita na equao


k 1

anterior. Mas n no pode dividir b 2

1 pela escolha de k como o menor inteiro, tal que


k 1

n divide b 2

1 . Portanto n divide b 2

1 , isto , b 2

k 1

1 mod n .

Nossa anlise revelou o seguinte: se n primo, ento para toda base b , 1 b escrevendo as d potncias b d , b 2d , b 2
2d

n 1 ,

, b2

s 1 d

, ou a primeira congruente a 1

mdulo n (caso k =0 como dito anteriormente), ou alguma delas ser congruente a 1 mdulo n . Se nada disso acontecer, ento o inteiro n composto e dizemos que b testemunha de que n composto. Se um inteiro positivo composto n passa no teste de Miller-Rabin para a base b , ento afirmamos que n pseudoprimo forte para a base b . Exemplos Vamos ver agora algumas aplicaes. 1) Vimos que 341 pseudoprimo de Fermat para a base 2 . Vamos test-lo com o teste de Miller-Rabin. Se n =341 , temos que n 1=340=2285 . Precisamos calcular duas potncias: 285 e

285

. Calculando as potncias obtemos:

285 32 mod 341 2170 = 285 32 21 mod 341


Como nem a primeira potncia congruente a 1 mdulo 341, nem alguma delas congruente a
2

1 mdulo 341, ento 2 testemunha de que 341 composto.


O segundo pseudoprimo de Fermat para a base 2 o nmero de Carmichael 561. Vamos ver se passa no teste de Miller-Rabin com a base 2? Se n =561 , ento n 1=560=2 435 . Temos, ento, que calcular as potncias mdulo

561 a seguir: 235 , 22 35 , 2 2

235

, 22

335

. Calculando essas potncias, obtemos:

235 263 mod 561 2235 = 235 263 2166 mod 561 2435 = 270 166 267 mod 561 2835 = 2140 67 2 1 mod 561
Como nem a primeira potncia congruente a 1 mdulo 561, nem alguma delas congruente a
2 2 2

1 mdulo 561, ento 2 testemunha de que 561 composto.


Mas mesmo esse teste tem os seus algozes. Os primeiros pseudoprimos fortes para a base 2 so 2.047, 3.277, 4.033, 4.681, 8.321, 15.841, 2.934, ... . Os primeiros pseudoprimos fortes para a base 3 so 121, 703, 1.891, 3.281, 8.401, 8.911, 10.585, ... . H mesmo alguns pseudoprimos fortes bem pequenos. fcil verificar que 25 pseudoprimo forte para a base 7. Apesar da existncia de pseudoprimos fortes, a aplicao do teste de Miller-Rabin com o uso de vrias bases extremamente eficiente. Usando as bases 2 , 3 e 5 , o teste falha apenas para 13 inteiros entre 1 e 2,51010 . Se adicionamos a base 7 , ento existe um nico inteiro composto neste intervalo que passa no

teste de Miller, a saber, o inteiro 3.215 .031.751 . Adicionando a base 11 , no h pseudoprimos fortes para as bases 2 , 3 , 5 , 7 e 11 entre 1 e 1012 . Veja no endereo http://mathworld.wolfram.com/StrongPseudoprime.html. No h um inteiro composto que passe no teste de Miller-Rabin para todas as bases. De fato, pode-se provar que, se um inteiro n passa nesse teste para n /4 bases, ento n certamente primo. Embora esta afirmao fornea um critrio determinstico de primalidade, este no prtico, uma vez que testar n /4 bases para inteiros n grandes totalmente invivel.

Nesta aula, estudamos dois testes de primalidade: os testes de Fermat e o de Miller-Rabin. So dois testes probabilsticos: um nmero que no passa em um destes testes certamente composto e, se passar no teste, ento, muito provavelmente, ser primo. Porm h inteiros que enganam o teste; so os chamados pseudoprimos. Pseudoprimos para uma base b so inteiros compostos que passam no teste de Fermat para a base b , enquanto que pseudoprimos fortes para uma base b so inteiros compostos que passam no teste de Miller-Rabin para a base b . H inteiros, alis um nmero infinito deles, que so compostos, mas passam no teste de Fermat para todas as bases. So os chamados nmeros de Carmichael. No h inteiros compostos que passam no teste de Miller-Rabin para todas as bases.

Atividades 1) Mostre que 15 pseudoprimo para a base 4. 2) Mostre que 25 pseudoprimo para a base 7. 3) Mostre que 91 pseudoprimo para a base 3. 4) Mostre que 25 pseudoprimo forte para a base 7.