Números Primos & Fatoração
Estudaremos os conceitos de números primos e divisíveis, entenderemos como encontrá-los, fatorá- los e sobre a infinidade de números primos existentes. Também sobre os números ditos square-free.
[Instruções: Execute primeiramente a seção de recursos dos códigos. Apesar de nenhum resultado ser apresentado imediatamente, estas definições serão usadas posteriormente nesta área de trabalho]
1. O que é um Número Primo?
2. Crivo de Eratóstenes
3. Fatoração em Números Primos
4. Quantos Primos Existem? E qual é o maior Número Primo?
5. Números sem Raiz Quadrada
0. Código
> restart; with(plots):
Warning, the name changecoords has been redefined
> Primos := proc( N ) local n, m, M;
n := min(14, floor( sqrt(N)*1.5 ));
m := ceil( N/n);
print(cat(`O primeiro`, n*m, ` primos : `)); print(` `);
array( [seq( [ seq( ithprime( (j-1)*n+i), j = 1..n ) ], i =
end proc:
> Crivo de Eristótenes := proc( N ) local n, m, A,M, p,i,j,k, K;
n := min(20, floor( sqrt(N)*1.5 ));
m := ceil( N/n); M := n*m;
A:= array( [seq( [ seq( (i-1)*n+j+1, j = 1..n ) ], i = 1..m) ]):
print(cat(`Abaixo estão os inteiros a partir do 2 até `, M+1));
print(` `);
print(A); print(` `);print(` `);print(` `);
> K := 0;
for K while ( ithprime(K+1) < evalf(sqrt(M))) do end do;
for k from 1 to K do p := ithprime(k);
for i from 1 to m do for j from 1 to n do if(A[i,j]<>p)
then if( irem(A[i,j],p)=0) then A[i,j]:=` ` fi; fi;
od;od;
print(cat(`Abaixo estão os inteiros a partir do 2 até `, M+1,
` depois de remover os múltiplos de `,p,` (exceto o próprio
`,p,` )`)); print(` `);
print(A);print(` `);print(` `);
od;
print(` `);
print(`O Crivo de Eratóstenes.Diz que todo o número deixado no crivo é um número primo`);
print(`porque nós removemos todos os números compostos !!`);
end proc:;
Error, reserved word `end` unexpected
> LargestPrime := proc(p) local n,k, P, N,NS,product;
n := 0;
for n while ( ithprime(n) < p) do end do; P:= ithprime(n);
print(cat(`Se `, P, ` (O `,n,º `primo) é o maior número primo, então os primos podem ser :`));
product := 1;
for k from 1 to n do
product := product* ithprime(k); print(ithprime(k));
od;
print(` `); print(cat(`O produtos desses números primos conhecidos é ` , product));
N := product +1 ;
print(cat(`Se adicionarmos um a esse produto, nós temos o numero
`, N));
NS := numtheory[factorset](N);
if ( nops(NS) = 1)
then print(cat(N,` é o novo número primo sozinho!`));
else print(cat(N,` não é primo, mas isto possui novos primos.`));
print(N = ifactor(N));
fi;
end proc:;
Error, missing operator or `;`
> FindSquare := proc(N) local n,k,FS, square;
if( numtheory[issqrfree](N) )
then print(cat(N,` não tem raiz exata!`));
else
FS := numtheory[factorset](N);
square := 1; n:= nops(FS);
for k from 1 to n do
if( irem(N, FS[k]^2) = 0) then square := square*FS[k]^2; fi;
od;
print(cat(square, ` é o melhor quadrado que divide `,N));
fi;
end proc:
1. Pedras Fundamentais
Assim como a Física descobriu estruturas menores, como os átomos, e a Biologia, como as células, a Matemática também descobre números menores. Neste sentido, números divisíveis são aqueles compostos de números menores, enquanto números primos são compostos apenas deles próprios.
Enquanto a Física não consegue ir além dos quarks, a Matemática não consegue ir além dos números primos.
Vamos estudar essa "Matéria Matemática" (conjunto):
> 2100 = `(30)(70)`;
2100(30)(70)
Note que cada um dos fatores é divisível, já que também podem ser fatorados.
> 30 = `(6)(5)`; 70 = `(7)(10)`;
30(6)(5) 70(7)(10)
E, além disso, alguns desses fatores são divisíveis e ainda podem continuar a ser fatorados.
> 6 = `(3)(2)`; 10 = `(5)(2)`;
6(3)(2) 10(5)(2)
Considerando que cada número divisível pode ser fatorado e possivelmente esses fatores continuarem a ser fatorados, esse processo deve ter um fim. O processo termina quando todos os fatores de um número são primos. Enquanto um fator não for primo, ele ainda pode ser fatorado.
> 2100 = `(30)(70) = (6)(5)(7)(10) = (3)(2)(5)(7)(5)(2)`;
2100(30)(70) = (6)(5)(7)(10) = (3)(2)(5)(7)(5)(2)
Assim, após reunirmos todos os possíveis primos e posicioná-los em ordem crescente, teremos uma fatoração de primos para cada número divisível:
> ifactor(2100);
( )
2 2 3 ( )( ) 5 2 7( )
Podemos facilmente obter a fatoração de primos em qualquer número divisível usando o comando do Maple para fatoração de números inteiros, ifactor.
> 32: % = ifactor(%);
105: % = ifactor(%);
192: % = ifactor(%);
32 2( )5 105 3 ( )( ) 5 ( ) 7
192 2( )6 3( )
> 432: % = ifactor(%);
4332: % = ifactor(%);
4320: % = ifactor(%);
432 2( )4 3( )3 4332 2( )2 3 (( ) 19)2
4320 2( )5 3( )3 5( )
Na prática, você pode utilizar uma "árvore" de fatores para fatorar completamente um número e, então, juntar todas as "folhas" da árvore que são o mesmo número primo, para depois expressar na forma exponencial.
2. O que é um Número Primo?
Considerando os números naturais diferentes de um, existem dois tipos de números:
Números primos - são os que podem ser divididos apenas por 1 ou por si próprios.
Números divisíveis – são os que também podem ser fatorados por outros números.
> `Números primos: `;
7: %=ifactor(%); 31: %=ifactor(%); 173: %=ifactor(%);
Números primos:
7 7( ) 31 31( ) 173 173( )
> `Números compostos: `;
6: %=ifactor(%); 35: %=ifactor(%); 221: %=ifactor(%);
Números compostos:
6 2 ( )( ) 3 35 5 ( )( ) 7 221 13 (( ) 17)
Assim como os estudos todos os números naturais de grande magnitude são primos ou compostos.
Exemplificaremos com um primeiro conjunto desses números inteiros − os números de 2 a 40
> Inteiros := { seq(k, k = 2..40) } ;
Inteiros := {2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24, , , , , , , , , , , , , , , , , , , , , , , 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40, , , , , , , , , , , , , , , }
Esses são os números primos ² 40. Perceba que nenhum deles pode ser fatorado.
> Primos := select( is Primos, Integers );
for k from 1 to nops(Primos) do Primos[k] = ifactor(Primos[k]);
od;
Error, missing operator or `;`
Esses são os números divisíveis ² 40. Perceba que cada um deles pode ser fatorado.
> Composites := remove( is prime, Integers);
Error, missing operator or `;`
> for k from 1 to nops(Composites) do Composites[k] = ifactor(Composites[k]); od;
Error, (in ifactor) invalid arguments
3. Quantos Primos Existem? E qual é o maior Número Primo?
Parece que os números primos são infinitos:
Esses são os primeiros 20 números primos ....
> Primes(20);
( ) Primes 20
E esses são os primeiros 200 números primos ...
> Primes(100);
( )
Primes 100
Esses são os primeiros 250 números primos ....
> Primes(250);
( )
Primes 250
E também podemos encontrar o centésimo número primo:
> ithprime(100);
541
Ou o ducentésimo, tricentésimo, quadringentésimo..., e os números primos assim por diante
> for k from 1 to 20 do print( cat(100*k, `º primo é `, ithprime(100*k))); od;
100º primo é 541 200º primo é 1223 300º primo é 1987 400º primo é 2741 500º primo é 3571 700º primo é 5279 800º primo é 6133 900º primo é 6997 1000º primo é 7919 1100º primo é 8831 1200º primo é 9733 1300º primo é 10657 1400º primo é 11657 1500º primo é 12553 1600º primo é 13499 1700º primo é 14519 1800º primo é 15401 1900º primo é 16381 2000º primo é 17389
Pergunta que não ofende:
Existe um número primo ainda maior? Digamos que exista. Digamos que p é o maior número primo. E, então, se multiplicarmos todos os números primos juntos, e somarmos um:
1 * 2* 3*...*
N pl p p pn
Esse novo número não é divisível como qualquer número primo − o que é contraditório. Logo, devem existir mais números primos do que o suposto maior número primo. Isso significa que existe mesmo um número infinito de primos.
Vamos tentar ver isso com alguns primos. Consideremos que 7 seja o maior primo.
> LargestPrime(7);
( ) LargestPrime 7
E se pensássemos que 17 fosse o maior número primo? ou 37, ou 53? (Atenção: quanto maior o número, mais tempo vai demorar. Se demorar muito, tecle o sinal de Pare na barra de ferramentas no topo da tela do Maple.)
> LargestPrime(17);
( ) LargestPrime 17
> LargestPrime(37);
( ) LargestPrime 37
> LargestPrime(53);
( ) LargestPrime 53
Portanto, há um número infinito de números primos, pois por maior que seja o número que encontremos, sempre haverá um maior! Os matemáticos já encontraram números primos com centenas de milhares de dígitos.
Quantas páginas seriam necessárias para escrever um número de 300 000 dígitos?
Façamos uma experiência. Usando o meu computador (um PC ), eu acho que esse número é a maior potência de dez que eu posso digitar no meu computador em uma só linha. Digamos que tenhamos 52 linhas por página.
> 1*10^105;
10000000000000000000000000000000000000000000000000000000000000000000\
00000000000000000000000000000000000000
> `números de dígitos` = 300000;
`números de linhas` = %/105;
`números de páginas` = %/50;
números de dígitos300000 números de linhas
números de dígitos 105
20000 7
números de páginas
números de linhas
50
números de dígitos
5250
400 7
> evalf((300000)/(105*52));
54.94505494
Seriam necessárias 55 páginas apenas para escrever um desses grandes números primos. Acho melhor não tentarmos encontrar e visualizar esses números, mas simplesmente viver sabendo que esses números realmente existem.
4. Crivo de Eratóstenes
Existe um método antigo para se encontrar vários números primos de uma vez. Ele começa com uma tabela de números naturais e depois elimina os múltiplos dos primos. Os primos em si devem permanecer mas deve-se remover todos os múltiplos daquele primo. Você só precisa usar números menores ou iguais à raiz quadrada do maior número da sua tabela.
Vamos procurar todos os primos até 40 ...
(Atenção : Após executar essa linha, você terá que retornar manualmente para ver cada passo).
> Sieve(40);
( ) Sieve 40
Neste diagrama, você também pode ver a distribuição de números primos neste diagrama. Observe os "primos consecutivos" : (3,5), (5,7),(11,13), (17,19), (29,31),(41,43).
Pergunta:
Quantos são os primos menores que 46? Veja o diagrama e conte quantos números tem. Você também pode executar a próxima linha.
> numtheory[pi](46);
14
Se você estiver pronto para um pouco mais de ação, tente o próximo comando ... e segure-se!
> Sieve(199);
( )
Sieve 199
Aqui você também pode ver a distribuição dos primos menores que 200 ! Perceba que eles tendem a ficar mais espaçados à medida que os números aumentam − em geral. Entretanto, ainda vemos
"Primos consecutivos" como 191 e 193 ou 197 e 199 mesmo próximos ao fim!
Você sabe quantos números há nessa tabela? Você deveria contar esse número:
> numtheory[pi](200);
46
Também podemos estudar a distribuição dos primos de outra maneira. Se contarmos quantos primos são menores ou iguais a um número dado e fizermos um gráfico dessa conta, obteremos esse gráfico bem interessante:
> plot( numtheory[pi](floor(x)), x = 2..120);
Parece haver um padrão...que é a conjetura de Gauss.
> plot( {numtheory[pi](floor(x)), x/ln(x)}, x = 2..120);
5. Números sem Raiz Quadrada
Para simplificarmos raízes quadradas, deixaremos dentro do radical apenas os números que não são quadrados perfeitos.
Esses números não apresentam raízes quadradas exatas. Observe os seguintes números por um instante.
> 42 : % = ifactor(%);
330 : % = ifactor(%);
2431 : % = ifactor(%);
42 2 ( )( ) 3 ( ) 7 330 2 ( )( ) 3 ( ) 5 ( 11)
2431 11 (( ) 13 () 17)
> FindSquare(42);
FindSquare(330);
FindSquare(2431);
( ) FindSquare 42
( )
FindSquare 330
( )
FindSquare 2431
Cada um desses números é fatorável − mas todos os fatores têm o expoente 1.
Obviamente, nenhum primo é quadrado perfeito.
> 17 : % = ifactor(%);
41 : % = ifactor(%);
97 : % = ifactor(%);
17 17( ) 41 41( ) 97 97( )
> FindSquare(17);
FindSquare(41);
FindSquare(97);
( ) FindSquare 17
( ) FindSquare 41
( ) FindSquare 97
Agora, vamos observar esses números, que não são quadrados perfeitos, porém, são fatoráveis.
Você consegue identificar quadrados perfeitos "escondidos" entre os fatores?
> 12 : % = ifactor(%);
375 : % = ifactor(%);
72 : % = ifactor(%);
686 : % = ifactor(%);
12 2( )2 3( ) 375 3 ( )( ) 5 3 72 2( )3 3( )2 686 2 ( )( ) 7 3
> FindSquare(12);
FindSquare(375);
FindSquare(72);
FindSquare(686);
( ) FindSquare 12
( )
FindSquare 375 ( ) FindSquare 72
( )
FindSquare 686
Observe que os números sem raiz quadrada são sempre produtos de números primos distintos. Se um número primo tiver um quadrado, um cubo, a quarta potência etc ..., então ele contém no mínimo um quadrado perfeito.
> 6 : % = ifactor(%); FindSquare(%%);
6 2 ( )( ) 3 ( ) FindSquare 6
> 12 : % = ifactor(%); FindSquare(%%);
12 2( )2 3( ) ( ) FindSquare 12
> 24 : % = ifactor(%); FindSquare(%%);
24 2( )3 3( ) ( ) FindSquare 24
> 48 : % = ifactor(%); FindSquare(%%);
48 2( )4 3( ) ( ) FindSquare 48
> 96: % = ifactor(%); FindSquare(%%);
96 2( )5 3( ) ( ) FindSquare 96
> 192 : % = ifactor(%); FindSquare(%%);
192 2( )6 3( )
( )
FindSquare 192