1 Introdução - Imecc

Propaganda
MONOGRAFIA
Teoria Aritmética dos Números
Wanderson Luiz da Silva - r.a.: 017585
[email protected]
Professor Dr. Fernando Eduardo Torres Orihuela
[email protected]
IMECC/Unicamp, Campinas, SP, Brasil
Resumo
O algoritmo para determinar primos que respeitem a condição ap−1 ≡ 1(mod p2 ) deve constar de
interesse especial na avaliação da primalidade. Isto porque são importantes os métodos de reconhecimento de primos para números muito grandes. Usados na confecção de chaves privadas de encriptação.
Atualmente dispõe-se de algoritmos probabilísticos que executam em tempo polinomial e acusam se um
número é primo com baixíssimo percentual de erro. Um método para isto é o de Monte Carlo, usado para
identificar a priori os números primos. No final desta monografia se encontram também uma relação de
10 exercícios dentre os das listas dadas.
Palavras chaves: primalidade, aritmética modular, teste de Monte Carlo.
1
Introdução
Os primeiros algoritmos criados para testar a primalidade de um número remontam a Grécia antiga. Até
2002, os principais algoritmos desenvolvidos para esta finalidade enquadravam-se em duas grandes classes:
• De tempo não-polinimial e determinísticos: Afirmam com 100% de certeza a primalidade de um número, mas o cálculo é realizado em tempo exponencial. Exemplos: Crivo de Eratóstenes, AdlemanRumely.
• De tempo polinomial mas não-determinísticos: A complexidade do algoritmo é em função de um
polinômio - o tempo de cálculo não ’explode’ quando o número testado é muito grande - mas não dão
certeza absoluta quanto à primalidade. Exemplos: Testes de Monte Carlo.
1.1
Algoritmo
Nos ocuparemos de implementar uma rotina que identifique todos os primos do intervalo (a, r] tais que
ap−1 ≡ 1(mod p2 )..
(1)
Elaborando um pseudo-código que se basea na iéia de duas fases. A pimeira fase identificando os primos
presentes no intervalo [a + 1, r]. E a segunda sugeitando a relação dos candidatos dados pela fase um ao
critério (1).
Fase I S = U = ∅
candidato = a + 1
while candidato ≤ r
. . .if isprime(candidato)
. . . . . .U = U + {candidato}
1
. . .end if
candidato = next
end while
Fase II while U 6= ∅
. . .p = U (1), onde U (1) denota o primeiro elemento do conjunto U .
. . .U = U − p, de forma a remover p de U .
. . .if condiction(p)
. . .. . . S = S + p
. . .end if
end while
Devemos atentar ao fato de que não detalhamos 3 funções, de indispensável importância, que atuam
no algoritmo. São as funções isprime, next e condiction. Sem considerações maiores sobre eficiência
podemos dizer que next, sempre escolhe o próximo ímpar. A função condiction testa a condição (1)
pela função mod que eventualmente cada linguagem tem. No entanto a função isprime merece alguma
atenção maior. Devemos atentar que o teste de primalidade e a fatoração são dois problemas distintos.
Se nos restringirmos ao teste de primalidade, não é preciso conhecer os fatores pois a única questão que
precisa ser respondida é "o número em questão é primo ou composto?". Existem alguns clássicos nesta área
da Matemática. O teorema de Wilson, por exemplo, diz que o inteiro p é primo se, e apenas se (p − 1)! ≡
−1(mod p). Como não se conhece um método para calcular rapidamente (n−1)! (mod n) , a caracterização
de primos de Wilson não tem valor prático para testar a primalidade de n.
2
Teste de Monte Carlo (Miller-Rabin)
É um algoritmo para teste de primalidade em tempo polinomial mas não-determinístico, ou seja, para determinar se um número p grande tem uma probabilidade P de ser primo. Para tanto, escolhe-se aleatoriamente
um número r no intervalo [2, p − 1] e aplica-se dois testes:
1. rp−1 6= 1(modp)
2. para algum inteiro k, 1 < mdc(r(p − 1)/2k − 1, p) < p
O primeiro teste é baseado no Pequeno Teorema de Fermat, enquanto o segundo procura achar um fator
comum entre dois números, sendo um deles p, o que implicaria p ser composto. Se r for aprovado em ambos
os testes, então p é composto. Mais da metade dos números do intervalo estão neste caso. Caso contrário, se
um número r não passa no teste, então p pode ser primo com probabilidade P = 50%. Neste caso, escolhese um novo r e aplica-se o teste também. Se o novo r também não passa no teste, a probabilidade de que p
P
seja primo sobre para 75%, ou seja, P (m) = m
i=1 (1/2i) onde m é a quantidade de valores de r que não
passaram no teste até então. Por exemplo, em um teste para o número 5991, este é indicado como primo com
apenas uma iteração (50% de certeza). Ao fazermos uma nova iteração, descobrimos que ele na verdade se
trata de um composto. Em outro teste para o mesmo número, com valores diferentes de r, precisamos de
5 iterações para concluirmos que 5991 é composto. Isso ocorre porque r é escolhido aleatoriamente, e é
possível escolhermos 1 ou mais valores que nos forneça um falso resultado. Felizmente, para 10 iterações
em que um número p não passe no teste, temos 99, 9% de certeza de que p é primo. Após a publicação deste
teste, diversos outros testes polinomiais mas não-determinísticos foram inventados e tornando esta classe de
testes o principal meio de verificar a primalidade de um número.
2
3
Exercícios
Exercício 1: Provar que 13 + 23 + 33 . . . + n3 = (1 + 2 + 3 + . . . + n)2
Demonstração 1 Vamos construir essa demonstração por indução. Assumindo n = 1 temos que a insertiva
é verdadeira. Agora, assumindo ser verdade para n − 1, usamos a hipótese indutiva para veficar ser valida
para n.
Sn−1
z
}|
{
13 + 23 + 33 . . . + (n − 1)3 + n3 = (1 + 2 + 3 + . . . + n − 1)2 + n3
2
= Sn−1
+ n2 − n2 + 2nSn−1 − 2nSn−1 + n3
2
= (Sn−1
+ 2nSn−1 + n2 ) + n3 − 2nSn−1 − n2
= (Sn−1 + n)2 + n3 − 2nSn−1 − n2
|
{z
}
Sn
= Sn2 + n(n2 − n − 2Sn−1 ).
Substituíndo Sn−1 = 1 + 2 + 3 + . . . + n − 1 =
n(n−1)
2
=
n2 −n
2
"
Sn2
n2 − n
+n n −n−2
2
(2)
em (2):
#
2
= Sn2 .
Exercício 2: Seja p e q primos tais que p ≥ q ≥ 5. Provar que 24|(p2 − q 2 ).
Demonstração 2 Vamos fazer essa demostração baseada em 2 etapas. Primeiramente provamos ser divisível por 8 em seguida mostramos ser divisível por 3.
p2 − q 2 = (p + q)(p − q) = (2k1 + 1 + 2k2 + 1)(2k1 + 1 − 2k2 − 1) = 4(k1 + k2 + 1)(k1 − k2 ).
Como (k1 + k2 + 1) ou (k1 − k2 ) é par, temos que p2 − q 2 necessariamente é um mútiplo de 8. Além disso,
como p, q ≥ 5, pelo teorema de Euler temos que p2 ≡ q 2 ≡ 1(mod 3), daí p2 − q 2 ≡ 0(mod 24)
Exercício 3: Provar que não existe n ∈ N tal que 7|(4n2 − 3).
Demonstração 3 Vamos considerar um sistema completo de resíduos r = {0, 1, 2, 3, 4, 5, 6} para módulo
7. Dessa forma temos que n ≡ rj , ∀n ∈ Z para algum j ∈ {0, 1, . . . , 6}. Sendo assim temos que
n2 ≡ rj2 (mod 7) portanto n2 ≡ r̄j onde r̄j ∈ {0, 1, 2, 4}. Com raciocínio análogo dizemos então que
4n2 ≡ 0(mod 7),
4n2 ≡ 1(mod 7),
4n2 ≡ 2(mod 7),
4n2 ≡ 4(mod 7).
O que mostra não só a incongruência entre 4n2 e 3, como também a 5 e 6.
3
Exercício 4: Mostrar que se 2n + 1 é primo e ímpar, então n é uma potência de dois
Demonstração 4 Queremos provar ser n da forma 2x , caso 2n primo. Suponha que não seja verdade,
portanto ∃n 6= 2x |2n é primo. Portanto ∃k ∈ Z com k ≥ 1 e ∃p, primo ímpar, tal que n = kp. Daí usando
a relação
n−1
X
xn − y n = (x − y)(
xi y n−1−i ),
i=0
n
podemos dizer ser 2 + 1 = 2
kp
k p
p
k
+ 1 = (2 ) − (−1) = [2 − (−1)]
"n−1
X
#
k i
n−1−i
(2 ) (−1)
= (2k + 1)A,
i=0
k i
n−1−i . Vemos ser A um número inteiro por ser uma combinação de inteiros e
onde A = n−1
i=0 (2 ) (−1)
> 1, pois 2n + 1 > 2k + 1. Além disso 2k + 1 é também um inteiro positivo. Ou seja, achamos uma
decomposição de 2n em produto de números inteiros. Disso o absurdo de considerarmos 2n primo para
n 6= 2x .
P
Exercício 5: Sejam a, b ∈ N tais que
1
a
+
1
b
é um inteiro. Mostrar que a = b e que a = 1 ou a = 2.
Demonstração 5 Seja k ∈ Z e supondo a = b, daí a1 + 1b = a1 + a1 = a2 , daí k2 = a, portanto k = 1 ou
k = 2, caso contrário a deixaria de ser natural.
Agora suponhamos, sem perda de generalidade que b > a. Temos que a1 + 1b = k ⇒ b(ak − 1) = a. Os
únicos valores de k que fazem sentido são k > 0, caso contrário teríamos a < 0. No entanto caso k > 1
teríamos que ak − 1 > 1 o que implicaria que b < a, contrariando nossa hipótese inicial. Resta então
tratar do caso k = 1. Temos então b(a − 1) = a, mais uma vez devemos ter 0 < (a − 1) < 1, o que não
acontece para nenhuma valor natual de a. Sendo assim a única forma se respeitar a insertiva é sendo a = b
com a = 1 ou a = 2.
Exercício 6: Provar que p = 3 é o único primo p tal que p, p + 2 e p + 4 são todos primos.
Demonstração 6 Sendo p primo, temos que p = 3 ou p ≡ r(mod 3) com r ∈ {1, 2}. Vamos analisar o
primeiro caso em que p ≡ 1(mod 3), daí temos p + 2 ≡ 1 + 2(mod 3) ⇒ p + 2 ≡ 0(mod 3) portanto não
primo. Agora seja p ≡ 2(mod 3) daí temos p + 2 ≡ 2 + 2(mod 3) ⇒ p + 2 ≡ 1(mod 3), e por conseguinte
p + 4 ≡ 0(mod 3) portanto também não primo. Para o caso p = 3 temos p + 2 = 5 e p + 4 = 7, primos
por inspeção. Daí concluímos que não existe p 6= 3 tal que p + 2, p + 4 sejam primos.
Exercício 7: Provar que φ(m) é par se m > 2.
Demonstração 7 Vamos fatorar m em termos de números primos. Daí dizemos ser m = ni=1 pαi i . Sendo
α
assim, usando a propriedade mutiplicativa da função φ e que (pαi i , pj j ) = 1 ∀i 6= j temos φ(m) =
Qn
Q
φ( i=1 pαi i ) = ni=1 φ(pαi i ). Agora, sendo cada pi um primo, podemos dizer que φ(pαi i ) = pαi i − pαi i −1 o
que nos tras a expressão1
Q
φ(m) =
n Y
pαi i − pαi i −1 .
i=1
A função φ(p ) é o numero de inteiros positivos não maiores que pn e relativamente primos com ele. No entanto os únicos
não coprimos, menores que pn são mútiplos de p. Daí, sendo sua quantidade dada por pn−1 , temos a relação (pn ) = pn − pn−1 .
1
n
4
Percebemos ser o termo geral do produtorio a diferença entre dois número ímpares, caso pi 6= 2, ou a
diferença entre dois pares caso pi = 2. Disso asseguramos ser o produtorio par, pois os os termos são da
forma 2k.
Exercício 8: Seja a um inteiro impar. Provar que
a2 + (a + 2)2 + (a + 4)2 + 1 ≡ 0(mod 12).
Demonstração 8 Sendo a um inteiro ímpar, então podemos representa-lo na forma 2k + 1, onde k ∈ N .
Daí fazendo a substituição, temos:
S(a) = a2 + (a + 2)2 + (a + 4)2 + 1 = (2k + 1)2 + [(2k + 1) + 2]2 + [(2k + 1) + 4]2 + 1
= (4k 2 + 4k + 1) + (4k 2 + 12k + 9) + (4k 2 + 20k + 25) + 1
= (4k 2 + 4k 2 + 4k 2 ) + (4k + 12k + 20k) + (1 + 9 + 25 + 1)
= 12k 2 + 36k + 36
= 12(k 2 + 3k + 3).
Dai temos claramente que S(a), para a ímpar é um mútiplo de 12, portanto S(a) ≡ 0(mod 12).
Exercício 9: Provar que 10 não divide (n − 1)! + 1 para todo n ∈ N
Demonstração 9 A insertiva é trivial para n ≥ 3, pois se divisivel por 10 deverá ser par. No entanto
∀n ≥ 3 temos (n − 1)! + 1 ímpar. Será então, suficiente analisarmos os caso em que n ∈ {1, 2}. Daí
(1 − 1)! + 1 = (2 − 1)! + 1 = 2, que não é divisivel por 10.
Exercício 10: Goldbach conjecturou que todo núnero par 2n > 2 é soma de dois primos. Erdos
conjecturou que existem inteiros q e r tais que
φ(q) + φ(r) = 2n
Isto significa que a conjectura de Goldbach implica na de Erdos ?
Demonstração 10 Sim, pois sendo x par maior que 2, podemos dizer ser x = 2n + 2 onde n ∈ N . Daí,
caso a conjectura de Goldbach seja verdadeira ∃q, r primos tais que 2n + 2 = q + r ⇒ q + r − 2 = 2n ⇒
(q − 1) + (r − 1) = 2n ⇒ φ(q) + φ(r) = 2n.
Exercício 11: Definamos a sequência de naturais: F1 = F2 = 1 e para n ≥ 3, Fn = Fn−1 + Fn−2 ,
números de Fibonacci. Mostrar que:
• F1 + F3 + . . . + F2n−1 = F2n
Demonstração 11 Para n = 1 temos que a insertiva fica como F1 = F2 , portanto verdadeiro.
Assumindo ser verdadeiro para n temos para n + 1 que F1 + F3 + . . . + F2n−1 + F2n+1 = F2n +
F2n+1 = F2n+2 .
5
• F2 + F4 + . . . + F2n = F2n+1 − 1
Demonstração 12 Para n = 1 temos F2 = F3 − 1, portanto verdadeiro. Assumindo ser verdadeiro
para n−1 temos para n que F2 +F4 +. . .+F2n−2 +F2n = F2n−1 −1+F2n = (F2n−1 +F2n )−1 =
F2n+1 − 1.
• F1 + F2 + . . . + Fn = Fn+2 − 1
Demonstração 13 Para n = 1 temos F1 = F3 − 1, portanto verdadeiro. Assumindo ser verdadeiro
para n temos para n que F1 + F2 + . . . + Fn + Fn+1 = Fn+2 − 1 + Fn+1 = (Fn+1 + Fn+2 ) − 1 =
Fn+3 − 1.
• (Fn , Fn+1 ) = 1
Demonstração 14 Fn+1 = Fn + Fn−1 onde Fn−1 < Fn , n > 2 então Fn+1 = 1Fn + Fn−1 ⇒
(Fn+1 , Fn ) = (Fn , Fn−1 ). Aplicando este raciocício recursivamente temos (Fn+1 , Fn ) = (F3 , F2 ) =
(3, 1) = 1.
• (Fn , Fn+3 ) é 1 ou 2.
Demonstração 15 (Fn , Fn+3 ) = (Fn , Fn+2 + Fn+1 ) = (Fn , 2Fn+1 + Fn ) = (Fn , 2Fn+1 ). Temos
que (Fn+1 , Fn ) = 1 ⇒ (Fn , 2Fn+1 ) = (Fn , 2). Então se Fn par, (Fn , Fn+3 ) = 2, caso contrário
(Fn , Fn+3 ) = 1.
6
Download