Vous êtes sur la page 1sur 4

19-11-2010 Algoritmos

Página dos Números Primos


Página projecto da cadeira de ICM do DEFCUL

Algoritmos para calcular números primos


No artigo 329 de Disquisitiones Arithmeticae, Gauss (1801), escreveu:

" O problema da distinção de números primos, dos números compostos e a resolução posterior destes
últimos, nos seus factores primos, é conhecido como um dos mais importantes e úteis da/na aritmética.
Tem inspirado a sabedoria e o trabalho de anciãos e modernos geometras, a uma extensão tal que eu
seria supérfluo a discutir esse assunto extensivamente . Mais, a dignidade da ciência só por si, parece
requerer, todos e quaisquer meios, com vista, a explorar a solução de um problema tão elegante e tão
célebre."

Apesar do que Gauss escreveu, o reconhecimento da primalidade de um número ou a procura da factorização de


números muito grandes, pode ao início parecer como um exercício pontual. No entanto é uma sensação errada.
A factorização e a primalidade de um número têm-se tornado muito importantes na criptografia da chave
pública, e esta representa, hoje em dia, uma das aplicações mais imediatas da teoria dos números nas
comunicações. Mais pode ser dito sobre a factorização. Eis uma transcrição de uma carta de um famoso
teoricista dos números, Brillhart:

" É irrelevante para um teoricista dos números, quem trabalha com exemplos; sendo a capacidade da
factorizar como uma das mais importantes das técnicas analíticas, porque o segredo do problema
passa pela revelação (e apenas quando) se descobrem os factores primos dos números em questão,
pela sua factorização. Eu sei que muitas pessoas - de facto a maioria das pessoas - não se apercebe
disso, porque nunca foram confrontados realisticamente com a necessidade de saber a factorização de
alguns números; mas eu asseguro-vos, que quando precisarem de tal, ficarão completamente frustados
pelo facto de o não conseguirem, porque os números serão grandes demais para serem factorizados.
Não é uma questão de desporto ou de excentricidade."

A primeira observação no que concerne ao problema de primalidade e factorização é claro : existe um algoritmo
para cada problema. Por algoritmo, entende-se um processo envolvendo uma quantidade finita de passos,
aplicáveis a qualquer número N e que nos vão indicar se N é um número primo, ou, se N é composto, e quais são
os seus factores primos. Nomeadamente, dado um número natural N, tenta-se sucessivamente cada número n =
2, 3, até N1/2 (o maior inteiro não superior a N1/2 ), para se tentar perceber se divide N. Se tal não acontecer N
é um número primo. Se, digamos, N0 dividir N, escreve-se N = N0 N1 , com N1 < N, então repete-se o mesmo
processo com N0 , e N1 . Eventualmente tal dar-nos-à a factorização completa de N em números primos.

Note-se no entanto que para N muito grande, pode ser que este algoritmo seja muito demorado, na determinação
da sua factorização ou primalidade. Este é o aspecto prático mais importante da tarefa, de achar um algoritmo
eficiente, tal que este contenha tão poucas operações quantas as possíveis, e que além disso necessite de
menos tempo e menos custo, ao ser realizado.

São apresentados alguns algoritmos: O Crivo de Erastotenes , dois algoritmos de Lucas, um algoritmo de
três matemáticos, Brillhart, Lehmer & Selfridge; algoritmo de Pepin para determinar a primalidade dos números
de Fermat (Fn), um algoritmo para determinar a primalidade dos números de Mersenne (Mn).

[Página anterior] [Página inicial] [Próxima página]

www.educ.fc.ul.pt/…/Algoritmos.htm 1/4
19-11-2010 Algoritmos

O crivo de Erastotenes
Como já foi analisado anteriormente , é possível saber-se se N é um número primo utilizando divisões triviais para
cada número n tal que n2 seja menor ou igual a N. Tendo em conta que a multiplicação é uma operação mais
fácil de realizar do que a divisão, Erastotenes (no século III a.C.) teve a brilhante ideia de organizar estas
maravilhosas computações, na forma de um bem conhecido crivo. Tal crivo, serve para determinar todos os
números primos, assim como as factorizações dos números compostos, até um dado número N. Vamos ilustrar
para N= 101.

Seguem-se os seguintes passos:

1. Escrevem-se todos os números até 101


2. Cortam-se, com um traço, todos os múltiplos de 2;
3. A cada passo seguinte cortam-se todos os números
múltiplos do seguinte menor número restante de p, que
seja maior do que p.
4. É suficiente fazê-lo até p2 < 101.

Embora todos os múltiplos de 2,3,5,7 < 1011/2 sejam


cortados, resta-nos número 53, que é primo pois ficou
sem ser cortado na tabela.

Então os números primos até 101 são, 2, 3, 5, 7, 11, 13,


17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73,
79, 83, 89, 97, 101.

[Próximo algoritmo]

[Voltar ao topo]

Algoritmos de Lucas
Este algoritmos são baseados no Pequeno Teorema de Fermat (para distinguir do denominado Grande
Teorema de Fermat).Que diz que: Seja n um número primo então para qualquer número inteiro a, tem-se
que : a p a (mód. p)

Algoritmo de Lucas de 1876:

Seja N>1. Assuma-se que existe um inteiro a>1 tal que:

1. aN-11 (mód. N),


2. am  1 (mód. N), para m =1,2, ..., N - 2.

Então N é um número primo.

Defeitos do algoritmo: pode parecer perfeito, mas requer N-2 sucessivas multiplicações por a, e a busca dos
resíduos do módulo N : Demasiadas operações.

Algoritmo de Lucas de 1891:

Seja N>1. Assuma-se que existe um inteiro a>1 tal que:

www.educ.fc.ul.pt/…/Algoritmos.htm 2/4
19-11-2010 Algoritmos
1. aN-1 1 (mód. N).
2. am  1 (mód. N) para cada m<N, tal que m seja divisor de N-1.

Então N é um número primo.

Defeitos apresentados por este algoritmo: requer o conhecimento prévio de todos os factores de N-1, embora
seja fácil de aplicar quando N é da forma N= 2n + 1 ou quando N=3.2n + 1.

[Algoritmo anterior] [Próximo algoritmo]

[Voltar ao topo]

Algoritmo de Brillhart, Lehmer & Selfridge


Em 1927, Lehmer tornou o algoritmo de Lucas datado de 1891 mais prático, mas este foi ainda tornado mais
flexivel por Brillhart, Lehmer & Selfridge em 1975:

Algoritmo de Brillhart, Lehmer & Selfridge:

Seja N>1. Assuma-se que para cada factor primo q de N-1 existe um inteiro a = a(q)>1 tal que:

1. aN-1 1 (mód. N).


2. a(N-1)/q  1 (mód.N).

Então N é um número primo.

Defeitos do algoritmo: mais uma vez, é necessário conhecer os factores primos de N-1, mas poucas
congruências têm de satisfeitas.

[Algoritmo anterior] [Próximo algoritmo]

[Voltar ao topo]

Algoritmo de Pepin para testar a primalidade


dos números de Fermat

Como os números de Fermat (Fn = 22^n +1) crescem muito rapidamente em função de n, torna-se muito
laborioso testar a sua primalidade. No entanto Pepin obteve em 1877 um algoritmo para testa a primalidade de
números de Fermat.

Algoritmo de Pepin:

Seja Fn = 22^n +1, com n³2, e k³2. Então as seguintes condições são equivalentes:

1. Fn é um número primo e (k/Fn ) = -1;

www.educ.fc.ul.pt/…/Algoritmos.htm 3/4
19-11-2010 Algoritmos
2. k (Fn -1)/2 -1 (mód. Fn ).

Este algoritmo é praticamente uma aplicação da fórmula de Euler para os factores de Fn(Euler demonstrou que
todos os factores de Fn , com n³2, são da forma k x 2n+2+1 e através do qual descobriu que 641 divide F5 : F5 =
641 x 6 700 417) . No entanto se Fn é composto este não nos indica qualquer factor deste.

[Algoritmo anterior] [Próximo algoritmo]

[Voltar ao topo]

Algoritmo para testar a primalidade de


números de Mersenne
Os números da forma Mn = 2n-1 com n um número primo são chamados de números de Mersenne, a sua
consideração deriva do estudo de números perfeitos (um número perfeito, é um número cujo resultado da soma
dos seus divisores naturais é ele mesmo; por exemplo o número 6 tem como divisores 1, 2, 3 e 1+2+3=6, 28
tem como divisores 1, 2, 4, 7, 14 e 1+2+4+7+14=28) efectuado por Marin Mersenne.

Algoritmo:

Mn =2n + 1 é um número primo se e só se Mn divide Sn-2, com (Sk)k1, uma sucessão definida recursivamente por
:
S0= 4, Sk+1=Sk2 -2.

[Algoritmo anterior]

[Voltar ao topo]

www.educ.fc.ul.pt/…/Algoritmos.htm 4/4

Vous aimerez peut-être aussi