RESUMO
A ocorrência e a distribuição dos números primos é assunto que ainda intriga o verdadeiro
espírito matemático. Diversas denominações e características deste simples conceito
numérico surgem nas mais variadas aplicações científicas, pois, a sua intrínseca versatilidade
percorre diferentes épocas do seu contínuo desenvolvimento acadêmico. Neste trabalho, para
melhor compreensão dos conceitos, dois códigos computacionais escritos em linguagem 𝐶
são disponibilizados com o objetivo de permitir a exploração desta intrigante abstração.
Numa particular descrição de resultados relacionados aos primos gêmeos, uma aplicação
robusta do programa identificou importantes diferenças na densidade de ocorrência desses
pares, quando os valores numéricos para o teste de primalidade tornaram-se arbitrariamente
grandes.
ABSTRACT
The occurrence and distribution of primes is subject still intrigues the true mathematical
mind. Different names and characteristics of this simple numerical concept arise in various
scientific applications, since its intrinsic versatility goes through different periods of its
ongoing academic development. In this study, to better understand the concepts, two
computational codes written in 𝐶 language are provided with the purpose of enabling the
exploration of this intriguing abstraction. A particular description of results related with the
twin prime, a robust implementation of the program identified significant differences in the
density of occurrence of these pairs, while the numerical values for the primality test become
arbitrarily large.
Keywords: Numeric code 𝐶. Primality test. Prime factors decomposition. Density of twin
primes.
*
Docente na Academia da Força Aérea AFA-Pirassununga/SP. alessandroafj@afa.aer.mil.br
**
Bolsista de Iniciação Científica da FATECE-Pirassununga/SP. rafael-claudino@hotmail.com
Trilhas Pedagógicas
Introdução
1
Euler provou a existência de infinitos números primos demonstrando que a soma dos inversos de todos os
primos diverge.
2
Do inglês Cousin primes.
3
The Prime Glossary, disponível em http://primes.utm.edu/glossary/xpage/iccanobiF.html, acesso em
dezembro 2013.
obtidos: 49499 e 34334327, e ainda, o segundo número é um omirp, isto é, seus dígitos
reversos 72343343 também é um número primo.
Primo palíndromo – é todo número
palíndromo que também é primo. A obra
de Honaker Jr. (2000) apresenta a lista ao
lado de primos palíndromos compondo
uma interessante pirâmide numérica.
Um caso particular é quando os dígitos do
primo vão aumentando e depois começam
a diminuir, por exemplo, o primo
palíndromo 12421. Neste caso, o número
é conhecido por primo montanha.
Primo James Bond – foi definido como sendo todo primo que termina em 007, tais
como, 4007, 6007, 9007 e 171007. Uma sequência deste tipo de primo e,
consequentemente, qualquer outra sequência de inteiros pode ser obtida na home page
Sloane’s On-Line Encyclopedia of Integer Sequences através do link: http://oeis.org/.
Com toda esta rica diversidade obtida a partir de um conceito simples que são os
números primos, o objetivo deste trabalho é apresentar dois códigos computacionais escrito
em linguagem 𝐶, um para obter a listagem de números primos dentro de um intervalo
determinado, e outro para obter a decomposição em fatores primos de um número composto
qualquer.
Evidentemente, esses programas possuem limitações computacionais que se referem
ao tamanho do número inteiro a ser fornecido como dado de entrada (YAN, 2001). No
entanto, de aplicação educacional e recreativa, a disponibilização dos códigos neste artigo
permite a imediata investigação da primalidade de um número com as propriedades e as
características previamente sugeridas.
Para ilustração dos códigos será discutida a obtenção de pares de primos gêmeos até o
limite de representação de um número inteiro pelo computador comum. No entanto, para
instigar novas motivações, são listados a priori os seguintes problemas em aberto e oriundos
do ramo da Teoria dos Números que envolve esses fascinantes números primos (PANTOJA,
2012).
a.) A Conjectura de Goldbach: “Todo número par 𝑛 > 2 é a soma de dois primos”.
b.) O Problema Ímpar de Goldbach: “Todo número ímpar 𝑛 > 5 é a soma de três
primos”.
c.) “Todo número par é a diferença de dois primos”.
d.) “Para todo número par 2𝑛 existe uma quantidade infinita de pares de primos
consecutivos que se diferem por 2𝑛”.
e.) Conjectura dos Primos Gêmeos (𝑛 = 1 do caso d.)): “Existem infinitos Primos
Gêmeos”.
f.) “Existem infinitos números primos da forma 𝑛2 + 1”.
g.) “A quantidade de números primos de Fermat4 é finita”.
h.) “Sempre existe um número primo entre 𝑛2 e (𝑛 + 1)2 ”.
Códigos e Método
Para verificação simples da primalidade de um número 𝑛 > 2 foi desenvolvido um
código em linguagem 𝐶 que procura, caso exista, um divisor 𝑑 tal que 2 ≤ 𝑑 ≤ √𝑛 .
Enquanto o código não determina nenhum divisor neste intervalo, um contador é
incrementado a cada passo e se superar √𝑛 o número 𝑛 é considerado primo, conforme
descrito por Coutinho (2013) ao apresentar o Crivo de Eratóstenes. Caso o código encontra
um divisor 𝑑 o número é classificado como sendo composto.
As linhas de comando abaixo descrevem o teste de primalidade feito por exaustão e
que serve de base para a obtenção dos dois importantes códigos do artigo que foram citados
anteriormente.
int main(int argc, char *argv[]) {
unsigned long long int x,y,n,i;
i=0;
while(i==0){
printf("digite o numero natural para o teste de primalidade\n");
scanf("%I64d",&n);
x=sqrt(n);
for(y=2;y<=x;y++){
if(n%y==0){
printf("O NUMERO E COMPOSTO\n");
y=x+1;
}
if(y==x){
printf("O NUMERO E PRIMO\n");
}
}
}
𝑛
4
São os números primos da forma 𝑝 = 22 + 1
a=n/f;
e=sqrt(a);
}
}
for(i=2;i<=e;i++){
if(a%i==0){
i=e+1;
}
if(i==e){
d=a*a;
for(y=1;n%d==0;y++){
d=d*a;
}
printf("\no segundo primo divisor e:%I64d elevado a:%d\n\n",a,y);
x=b+1;
a=0;
}
}
}
}
if(f==n){
printf("acabo a variavel f e:%I64d\n\n",f);
x=b+1;
}
if(x==b){
printf("O NUMERO E PRIMO\n\n");
}
}
u=1; t=1; f=0;
}
c=0;
system("PAUSE");
return 0;
}
if(i==raiz1)
{
gemeo1=primo;
gemeo2=primo+2;
raiz2=sqrt(gemeo2);
for(i=2;i<=raiz2;i++)
{
if(gemeo2%i==0)
{
i=raiz2+1;
}
if(i==raiz2)
{
fprintf(arquivo,"%I64d %I64d\n",gemeo1,gemeo2);
printf("%I64d %I64d\n",gemeo1,gemeo2);
gemeo3=primo+4;
raiz3=sqrt(gemeo3);
for(i=2;i<=raiz3;i++)
{
if(gemeo3%i==0)
{
i=raiz3+1;
}
if(i==raiz3)
{
fprintf(arquivo,"%I64d %I64d %I64d\n",gemeo1,gemeo2,gemeo3);
printf("%I64d %I64d %I64d\n",gemeo1,gemeo2,gemeo3);
system("PAUSE");
return 0;
}
}
}
}
}
}
}
fclose(arquivo);
system("PAUSE");
return 0;
}
5
Arquivo de 34,2 MB disponível na web através do link:
https://www.dropbox.com/s/c5nsc1ujfc40x3s/numerosGemeos.txt
4500
4000
3500
3000
y=x+2
2500
R² = 1
2000
1500
1000
500
0
100
200
300
400
500
600
700
800
900
0
1000
1100
1200
1300
1400
1500
1600
1700
1800
1900
2000
2100
2200
2300
2400
2500
2600
2700
2800
2900
3000
3100
3200
3300
3400
3500
3600
3700
3800
3900
Neste gráfico, além do alinhamento esperado sobre a equação da reta 𝑦 = 𝑥 + 2,
observa-se uma interessante densidade dos pares de primos gêmeos sobre a linha de
tendência.
Gráfico 2 – Gráfico de linhas das diferenças entre os maiores primos gêmeos de pares
consecutivos. Neste intervalo o menor valor observado foi igual a 6 e maior valor observado
foi igual a 168.
192
168
144
120
96
72
48
24
0
1
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
Para enriquecer essas discussões, foi selecionado do arquivo .txt, os maiores pares de
primos gêmeos que estavam disponíveis e ocupavam posições superiores a 1.000.000,
conforme a Tabela 2.
primos gêmeos da Tabela 2, verifica-se que a maior diferença entre estes primos é
134
252.460.513 − 252.427.601 = 32.912, o que indica uma densidade relativa de =
32.912
0,0041, bem inferior à densidade calculada na primeira centena de pares de primos gêmeos.
E isto é uma forte evidência de que a distância entre os pares de primos gêmeos está
aumentando quando a investigação de sua ocorrência avança para valores de ordem superior.
Outra característica segue da análise conjunta dos valores da Tabela 2 com a
disposição geométrica do gráfico de dispersão (Gráfico 3), pois observa-se a inexistência de
pares de primos gêmeos no intervalo de amplitude ℎ = 1000 definido pelos extremos
[242.554.000,242.555.000].
252465000
252460000
252455000
252450000
252445000
252440000
252435000
252430000
252425000
252427000
252428000
252429000
252430000
252431000
252432000
252433000
252434000
252435000
252436000
252437000
252438000
252439000
252440000
252441000
252442000
252443000
252444000
252445000
252446000
252447000
252448000
252449000
252450000
252451000
252452000
252453000
252454000
252455000
252456000
252457000
252458000
252459000
252460000
252461000
O correspondente gráfico de linhas para as diferenças entre os maiores primos
gêmeos de pares consecutivos, avaliadas na última centena dos valores disponíveis, está
representado no Gráfico 4. Verifica-se que o menor valor encontrado para a diferença é igual
a 12. O maior valor, igual a 1290 é, evidentemente, encontrado na mesma região de lacuna
dos primos gêmeos visualizado no Gráfico 3.
Verifica-se, finalmente, nas sequências dos pares de primos gêmeos (𝑝, 𝑝 + 2) que
seria primo por ser um múltiplo de 5. Esta discussão é útil no sentido de deixar o código mais
rápido, ou seja, uma vez identificado que um primo 𝑝 termina em 3, basta reiniciar o
Gráfico 4 – Gráfico de linhas das diferenças entre os maiores primos gêmeos de pares
consecutivos. Neste intervalo o menor valor observado foi igual a 12 e o maior valor
observado foi igual a 1290.
1440
1320
1200
1080
960
840
720
600
480
360
240
120
0
1000041
1000097
1000001
1000005
1000009
1000013
1000017
1000021
1000025
1000029
1000033
1000037
1000045
1000049
1000053
1000057
1000061
1000065
1000069
1000073
1000077
1000081
1000085
1000089
1000093
1000101
1000105
1000109
1000113
1000117
1000121
1000125
1000129
1000133
Restrito apenas à limitação computacional da linguagem de programação 𝐶 para
trabalhar com números grandes, o maior par de primos gêmeos encontrado, que é menor que
100.000.000.000.000.001, foi o par (99.999.999.999.998.807, 99.999.999.999.998.809). E
ainda, neste grande intervalo indicado, a única identificação de primos trigêmeos foi a
sequência (3,5,7). Um resultado que, mesmo sendo comprovadamente esperado na
literatura, foi útil para certificar a validação e confiabilidade do código numérico
desenvolvido.
Considerações Finais
inteiros de precisão aritmética arbitrária, tais como, o código livre GNU Multiple Precision
Arithmetic Library.
Os números primos ainda guardam muito dos seus segredos e dos seus mistérios. É
bem possível que certas situações reais, representadas por fenômenos naturais, sociais ou
econômicos, possuam o mesmo comportamento arbitrário que foram observados nos
gráficos das figuras 2 e 4. Neste sentido, o estudo dos números primos poderia contribuir
para uma compreensão sistemática de eventos ao oferecer robustos mecanismos científicos
de previsibilidade.
Referências
WELLS, D. Prime Numbers: the most mysterious figures in math. New Jersey: John Wiley
& Sons. 2005.
YAN, S. Number Theory for Computing. 2 th. New York: Springer, 2001.