Desvendando Padrões em Números Primos por Posição, Uma
Abordagem Computacional e Matemática Inovadora
Autor:
Marlon Fernando Polegato
- Graduação: Engenharia Mecânica
- Pós-Graduação: MBA Gestão Empresarial
Palavras-chave:
Padrão Números Primos. Criptografia. Análise Computacional. Teoria dos Números.
Teoria das Cores. Computação Fotônica.
Resumo:
A investigação dos números primos constitui um dos pilares fundamentais da
matemática, com repercussões diretas no campo da criptografia digital. Este
trabalho introduz uma metodologia pioneira para a exploração de padrões inerentes
aos números primos, iluminando suas potenciais aplicações no aprimoramento de
algoritmos de criptografia e na melhoria da segurança de informações digitais.
Através de uma abordagem analítica e computacional, desvelamos estruturas
recorrentes que facilitam a identificação e a fatoração de primos, provendo assim
um caminho promissor para a otimização de procedimentos computacionais
essenciais.
Introdução:
Historicamente, os números primos têm capturado a atenção de matemáticos
devido à sua singularidade e ao seu papel central em diversas áreas de aplicação,
destacando-se a criptografia. Este estudo se dedica à exploração de padrões
subjacentes aos números primos, adotando uma nova perspectiva para sua
identificação e utilização prática. A identificação desses padrões não propicia
uma compreensão mais profunda dos primos, mas também indica vias inéditas para
a melhoria da segurança de dados.
Metodologia:
Empregamos uma fusão de análise teórica e processos computacionais para sondar
os padrões presentes entre os números primos e seus fatores. Essa metodologia é
articulada através da implementação de fórmulas matemáticas específicas e
algoritmos computacionais avançados, permitindo a identificação e a verificação de
sequências padrão recorrentes, que sinalizam uma nova fronteira no estudo dos
números primos.
Estrutura Geral dos Números Naturais Positivos na Estrutura \( 12k + c \)
Dentro desta estrutura, podemos diferenciar entre números primos e compostos,
assim:
Números Primos:
Números Primos nas Quatro Colunas Especiais:
- Todos os números primos maiores que 3 estão em uma das quatro progressões
aritméticas: \( 12k+1 \), \( 12k+5 \), \( 12k+7 \), e \( 12k+11 \), onde \( k \) é um inteiro
não negativo ímpar. Isso ocorre porque se um número primo fosse congruente a 2,
4, 6, 8, 10 ou 12 módulo 12, ele seria divisível por 2, e se fosse congruente a 3 ou 9,
seria divisível por 3, contrariando a definição de um número primo.
Casos Especiais - Primos 2 e 3:
- Os números primos 2 e 3 são os únicos primos que não estão contidos nas
quatro colunas especiais. Eles precisam ser tratados como casos especiais pois são
os menores e mais básicos números primos.
Números Compostos:
1. Múltiplos de 2 (exceto o primo 2):
- \( 12k + 2 \)
- \( 12k + 4 \)
- \( 12k + 6 \) (também múltiplo de 3)
- \( 12k + 8 \)
- \( 12k + 10 \)
- \( 12k + 12 \))
2. Múltiplos de 3 (exceto o primo 3):
- ( 12k + 12 \))
- \( 12k + 3 \)
- \( 12k + 6 \) (também múltiplo de 2)
- \( 12k + 9 \)
Geração de Todos os Números Naturais Positivos:
Para gerar todos os números naturais positivos inteiros, mantemos \( k \) como um
número ímpar e variamos \( c \) de 1 a 12. Isso cria uma estrutura onde:
- As colunas com \( c = 1, 5, 7, 11 \) contêm todos os números primos maiores que
3.
- As colunas com \( c = 2, 3, 4, 6, 8, 9, 10, 12 \) contêm números compostos, exceto
pelos primos 2 e 3, que são casos especiais e não se enquadram na estrutura de
colunas.
Dessa forma, essa abordagem não apenas gera todos os números naturais
positivos, mas também organiza os números de uma maneira que destaca os
números primos e compostos, facilitando a identificação e o estudo de suas
propriedades.
A compreensão de que todos os números primos maiores que 3 se situam nas
formas
6n±1
6n±1 representa uma visão inicial sobre a distribuição dos números primos na teoria
dos números. Esta formulação é, de fato, uma consequência da natureza ímpar dos
números primos (com exceção de 2) e da necessidade de que estes não sejam
divisíveis por 3, evitando assim números que seriam automaticamente compostos.
Expandindo essa visão, a estrutura
12±
12k±c, com
c sendo específicamente 1, 5, 7, ou 11, oferece uma compreensão mais detalhada e
precisa da distribuição dos números primos, indo além da simplificação fornecida
por
6n±1
6n±1.
Geração da Sequência:
A sequência é gerada com base na fórmula \( 12k \pm [1, 5, 7, 11] \) para \( k \)
ímpares. Isso cria uma sequência de números que exclui automaticamente todos os
múltiplos de 2, 3 e 4, que os números são sempre formados ao redor de múltiplos
de 12 com deslocamentos que evitam esses múltiplos menores.
- A sequência ordenada correta (com os números inseridos alternadamente no início
e no final) seria [47, 41, 35, 29, 23, 17, 11, 5, 1, 7, 13, 19, 25, 31, 37, 43, 49].
Padrão de Riscar:
O processo de riscar é aplicado aos números primos na sequência. Cada número
primo é utilizado para riscar números compostos adjacentes, contando um número
de passos igual ao valor do número primo para a esquerda e para a direita na
sequência, partindo do próprio número primo.
Exemplo de Riscagem:
- Número Primo 5:
- Para a esquerda: A partir do 5, conta-se 5 passos para a esquerda, riscando o
número 35.
- Para a direita: A partir do 5, conta-se 5 passos para a direita, riscando o número
25.
- Número Primo 7:
- Para a esquerda: A partir do 7, conta-se 7 passos para a esquerda, riscando o
número 35.
- Para a direita: A partir do 7, conta-se 7 passos para a direita, riscando o número
49.
Marcação dos Números Compostos:
Após o processo de riscagem, os números compostos identificados são marcados
como "X" na sequência. Os números primos permanecem inalterados. Isso
proporciona uma visualização clara da distribuição dos números primos na
sequência.
Exemplo com a Sequência Completa:
- Sequência original: [47, 41, 35, 29, 23, 17, 11, 5, 1, 7, 13, 19, 25, 31, 37, 43].
- Sequência após riscar os compostos: [47, 41, 'X', 29, 23, 17, 11, 5, 1, 7, 13, 19, 'X',
31, 37, 43, 'X'].
A extensão para \( 12k \pm c \), onde k é um inteiro positivo ímpar e \( c \) é 1, 5, 7
ou 11, é uma maneira mais detalhada de expressar essa ideia, que \( 6n \pm 1 \)
é equivalente a \( 12k + 1 \), \( 12k + 5 \), \( 12k + 7 \), e\( 12k + 11 \),. Portanto, essa
formulação é uma forma expandida de um conceito conhecido, embora apresente
uma estrutura mais granular e detalhada para a classificação de números primos e
compostos.
Gráficos de União Envio e Processamento de Dados por Luz:
Foi obtido um padrão entre cores e números, no qual as cores foram numeradas e
ordenadas a partir das quais o restante do conteúdo a ser apresentado foi obtido.
Os padrões numéricos triangulares com suas respectivas cores onde a sequência
(1, 4, 7) representa as cores primárias na escala RGB determinada por padrões
encontrados e a sequência (8, 5, 2) representa as cores secundárias da mesma
escala. Na sequência (6, 9, 3), o número 9 é, ao mesmo tempo, a nulificação e
união entre os pares inversamente iguais, e (3, 6) são as projeções em um terceiro
plano, proporcionando não apenas a expansão numérica e cromática, mas também
entrelaçando-as de forma que a soma dos seus opostos numéricos resulta em 9 e,
cromaticamente, resulta na cor branca, dando contexto numérico a teoria das cores
de Newton.
Ao enviar dados, utilizamos os números com suas respectivas cores, sendo elas:
1 = vermelho, 4 = verde, 7 = azul, 0 = preto,
2 = amarelo, 5 = magenta, 8 = ciano,
3 = oliva, 6 = violeta, 9 = branco.
Tabela padrões 3,6,9 Ondas Eletromagnéticas:
Para preencher, além de seguir os padrões circulares, foi necessário seguir as
geometrias platônicas, completando a soma de 3, 6 e 9, além dos padrões (1, 4, 7);
(8, 5, 2), sem deixar um número sem um divisor ao seu redor, não sendo possível
qualquer outro tipo de configuração nesta geometria específica além de manter um
padrão de soma dividido em 12 eixos principais somando até 12 e, em alguns
pontos, o número 23. Além disso, todos os números possuem divisores ao seu redor
ou em sua linha de fluxo que retorna ao mesmo número, e esses padrões contêm
em si o padrão geométrico dos números primos, onde podem ser observados nas
linhas de 1, 5, 7 e 11 e mais 4 linhas fora do centro onde seguem o fluxo. Não
entraremos em detalhes, pois este não é o objetivo do trabalho; cabe a cada um
interpretá-lo. Porém, adianto que este gráfico geométrico será o mapa em direção à
evolução tecnológica e química, na qual se podem ver padrões de ligações e
famílias periódicas conhecidas e novas a serem exploradas.
Matriz eletromagnética universal:
Autor: Marlon Fernando Polegato
Tabela Padrões 3,6,9 Interações de Ondas Eletromagnéticas:
Autor: Marlon Polegato Polegato
Características:
Com os métodos apresentados acima pode ser criado um novo método de envio e
processamento de dados de acordo com os padrões de interações da luz.
Assim, todos os números primos passam por essas 4 colunas, estando na
eliminação pela soma de 12 até o número 12; temos as seguintes eliminações
exceto o número 5 que não entra na soma 2, 3, 4, 5, 6, 8, 9, 10 e 12, que serão
enquadrados em alguns dos padrões de eliminação que serão apresentados em
breve. Todos os números primos devem ter como último dígito os números 1, 3, 7 e
9, que são subprodutos da soma inicial do número 12 com os números primos
primários, que são 1, 5, 7 e 11, onde no número 11 usamos o último dígito [1] e
retornamos aos números finais dos primos que é sempre adicionando os últimos
dígitos onde a partir do número 12 sempre usamos o número [2] adicionado aos
últimos dígitos do primo que resta:
Exemplo:
1 + 2 = 3
3 + 2 = 5
5 + 2 = 7
7 + 2 = 9
9 + 2 = 11 1
Tabela quatro colunas autor Marlon F. Polegato
O algoritmo `crivo_soma_Polegato` que você forneceu é uma variação do Crivo de
Eratóstenes para encontrar números primos. Vamos analisá-lo em termos de suas
operações e verificar se ele utiliza métodos de divisão, multiplicação ou teste de
primalidade direta:
Conceito geral dos Algoritmos:
“Processo de Crivo”:
- O algoritmo percorre cada número na lista (`primo = lista[i]`).
- Para cada número `primo`, o algoritmo inicia um segundo loop com `j` igual ao
valor de `primo`.
- Dentro deste loop, `j` é incrementado pelo valor de `primo` a cada iteração (`j +=
primo`).
- Se `j` estiver presente na lista, ele é removido (`lista.remove(j)`), e o contador de
passos é incrementado.
- Este processo continua até que `j` seja maior que o último número na lista.
Saída do Algoritmo:
- O algoritmo retorna a lista de números primos `primos` e o total de passos
`passos` realizados para remover os múltiplos.
Pré Análise:
- Métodos de Divisão ou Multiplicação: O algoritmo não realiza divisão ou
multiplicação direta. Ele simplesmente incrementa `j` pelos valores de `primo` e
verifica se `j` está na lista.
- Teste de Primalidade Direta: O algoritmo não faz um teste de primalidade direto
em cada número. Em vez disso, ele remove os múltiplos dos números (que são
compostos) da lista, o que é uma característica do Crivo de Eratóstenes.
- Operações Principais: As operações principais do algoritmo são incrementos,
comparações e remoções de elementos da lista.
Identificação de Múltiplos:
- Para um número primo \( p \) na lista, os múltiplos de \( p \) são identificados por
adicionar repetidamente \( p \) a si mesmo. Por exemplo, se \( p = 2 \), então seus
múltiplos seriam obtidos por \( 2 + 2 = 4 \), \( 4 + 2 = 6 \), \( 6 + 2 = 8 \), e assim por
diante.
- Essa abordagem é uma forma de "contagem de passos", onde cada passo é um
acréscimo do número primo \( p \). Essencialmente, estamos contando \( p, 2p, 3p,
\ldots \) por meio de adições sucessivas.
Remoção dos Múltiplos:
- Quando um múltiplo é identificado (conforme descrito acima), ele é removido da
lista. Essa remoção é baseada na verificação se o número calculado está presente
na lista e não através de uma verificação de divisibilidade, calcular os múltiplos de \(
p \) por meio de adições sucessivas, ou seja, \( p, p + p, p + 2p, \ldots, p + kp \) até
que \( p + kp > n \).
- Para cada múltiplo calculado de \( p \), se estiver na lista, removê-lo.
- **Lista de Números**: \( L = \{2, 3, 4, \ldots, n\} \)
- **Para cada número primo \( p \) em \( L \)**:
- **Para cada \( k \) tal que \( p + kp \leq n \)**:
- Se \( p + kp \) está em \( L \), então remova \( p + kp \) de \( L \).
- Incremente o contador de passos a cada remoção.
.
Algoritmo `crivo_soma_Polegato`
Objetivo: Identificar números primos em uma lista de números inteiros.
Entrada: Uma lista de números inteiros positivos.
Saída: Uma lista de números primos encontrados na lista original e o total de
passos realizados durante o processo.
### Implementação em Python
def crivo_contagem_unidirecional_otimizado(n):
if n < 2:
return []
# Inicializa todos os números como não "riscados"
riscados = [False] * (n + 1)
primos = []
limite = int(n**0.5) + 1 # Define o limite como a raiz quadrada de n
for num in range(2, n + 1):
# Se o número não foi riscado, é tratado como primo
if not riscados[num]:
primos.append(num)
# Para números maiores que a raiz quadrada de n, não é necessário riscar
seus múltiplos
if num > limite:
continue
passo = num # O passo é o próprio valor do número
indice_direita = num + passo
# Avança na direção "direita" riscando os múltiplos
while indice_direita <= n:
riscados[indice_direita] = True
indice_direita += passo
return primos
# Executando a função para um valor específico de n
n = 30
primos_identificados_otimizados = crivo_contagem_unidirecional_otimizado(n)
print("Números primos identificados até", n, ":", primos_identificados_otimizados)
Eficiência:
- O `crivo_soma_Polegato` oucrivo_contagem_unidirecional_otimizado(n) e suas
variações que estarão nos demais códigos adiciona a contagem de passos ao
processo, fornecendo uma medida da quantidade de operações realizadas.
- Semelhante ao Crivo de Eratóstenes, é eficiente, mas o processo de remoção de
múltiplos pode ser mais custoso do que a simples marcação, especialmente em
linguagens onde a remoção de elementos de uma lista é uma operação de custo
mais alto.
Algoritmo: `gerar_sequencia_12k_ordenada_correta` e
`calcular_indices_para_riscar_com_contagem`
1. **`gerar_sequencia_12k_ordenada_correta(intervalo)`**:
- Este algoritmo gera uma sequência de números baseada na fórmula `12k ± {1, 5,
7, 11}` para `k` ímpar.
- **Multiplicação e Subtração**: O algoritmo utiliza multiplicação (por exemplo, `12
* k`) e subtração/adição (por exemplo, `12 * k - 11`) para gerar a sequência. Não
divisão direta ou teste de primalidade.
2. **`calcular_indices_para_riscar_com_contagem(sequencia)`**:
- Calcula quais índices da sequência devem ser riscados com base no valor
absoluto dos números, excluindo números específicos (-3, -2, -1, 1, 2, 3).
- **Contagem de Passos**: Conta os passos necessários para riscar números.
Não realiza teste de primalidade ou divisão direta.
Análise do Segundo Algoritmo:
`gerar_sequencia` e `calcular_indices_para_riscar_com_contagem` (versão
simplificada)
1. **`gerar_sequencia(intervalo)`**:
- Gera uma sequência de números com base em uma fórmula simples envolvendo
subtrações e adições a partir do número 1.
- Não utiliza multiplicação, divisão direta ou teste de primalidade.
2. **`calcular_indices_para_riscar_com_contagem(sequencia)`**:
- Similar ao primeiro algoritmo, calcula os índices para riscar com contagem de
passos, sem realizar teste de primalidade ou divisão direta.
Pré Conclusão:
O uso de multiplicação está presente na geração da sequência no primeiro conjunto
de algoritmos, mas é uma multiplicação simples para definir a estrutura da
sequência, não relacionada a testes de primalidade atuais.
Algoritmo com a Sequência 12k Ordenada Correta:
Código Completo:
```python
def gerar_sequencia_12k_ordenada_correta(intervalo):
sequencia = []
for k in range(1, 2 * intervalo + 1, 2):
numeros = [
12 * k - 11,
12 * k - 7,
12 * k - 5,
12 * k - 1,
12 * k + 1,
12 * k + 5,
12 * k + 7,
12 * k + 11
]
for i, num in enumerate(numeros):
if i % 2 == 0:
sequencia.append(num)
else:
sequencia.insert(0, num)
return sequencia
def calcular_indices_para_riscar_com_contagem(sequencia):
indices_para_riscar = set()
passos = 0
for i, num in enumerate(sequencia):
if num not in [-3, -2, -1, 1, 2, 3]:
passo = abs(num)
for j in range(1, len(sequencia) // passo + 1):
indice_esquerda = i - j * passo
indice_direita = i + j * passo
if indice_esquerda >= 0:
indices_para_riscar.add(indice_esquerda)
passos += 1
if indice_direita < len(sequencia):
indices_para_riscar.add(indice_direita)
passos += 1
return indices_para_riscar, passos
def encontrar_nao_riscados(sequencia, indices_para_riscar):
nao_riscados = []
for i, num in enumerate(sequencia):
if i not in indices_para_riscar:
nao_riscados.append(num)
return nao_riscados
# Exemplo de uso
intervalo = 1000 # Definindo o intervalo
sequencia = gerar_sequencia_12k_ordenada_correta(intervalo)
indices_riscar, total_passos =
calcular_indices_para_riscar_com_contagem(sequencia)
nao_riscados = encontrar_nao_riscados(sequencia, indices_riscar)
# Exibindo todos os números não riscados
print(f"Total de passos: {total_passos}")
print(f"Números não riscados: {nao_riscados}")
```
Imagem referente ao resultado do código anterior
Algoritmo com Sequência Simples e Contagem de Passos:
Código Completo:
```python
def gerar_sequencia(intervalo):
return [1 - 6 * i for i in range(intervalo, 0, -1)] + [1] + [1 + 6 * i for i in range(1,
intervalo + 1)]
def calcular_indices_para_riscar_com_contagem(sequencia):
indices_para_riscar = set()
passos = 0
for i, num in enumerate(sequencia):
if num not in [-3, -2, -1, 1, 2, 3]:
passo = abs(num)
for j in range(1, len(sequencia) // passo + 1):
indice_esquerda = i - j * passo
indice_direita = i + j * passo
if indice_esquerda >= 0:
indices_para_riscar.add(indice_esquerda)
passos += 1
if indice_direita < len(sequencia):
indices_para_riscar.add(indice_direita)
passos += 1
return indices_para_riscar, passos
def ajustar_e_riscar_como_regex(sequencia, indices_para_riscar):
sequencia_riscada = [('X' if i in indices_para_riscar else str(num)) for i, num in
enumerate(sequencia)]
return sequencia_riscada
# Exemplo de uso
intervalo = 10
sequencia = gerar_sequencia(intervalo)
indices_riscar, total_passos =
calcular_indices_para_riscar_com_contagem(sequencia)
sequencia_riscada = ajustar_e_riscar_como_regex(sequencia, indices_riscar)
# Exibindo todos os números na sequência riscada
print(f"Total
de passos: {total_passos}")
print(f"Sequência riscada: {sequencia_riscada}")
```
Resultados do código anterior ”python”
Algoritmos Adaptados às 4 colunas:
Código Completo:
from math import gcd
import time
# Algoritmo Pollard's Rho Adaptado para Quatro Colunas
def pollards_rho_4_cols(n, iterations=1000):
bases = [1, 5, 7, 11]
for base in bases:
x, y, d = base, base, 1
for _ in range(iterations):
x = (x ** 2 + base) % n
y = (y ** 2 + base) % n
y = (y ** 2 + base) % n
d = gcd(abs(x - y), n)
if 1 < d < n:
return d
return None
# Lista de números compostos para testar
composite_numbers = [91, 187, 221, 589, 899]
# Resultados do teste
pollards_rho_results = []
for number in composite_numbers:
start_time = time.time()
factor = pollards_rho_4_cols(number)
end_time = time.time()
pollards_rho_results.append((number, factor, end_time - start_time))
pollards_rho_results
Fatoração de Quatro Colunas Adaptado:
Código Completo:
def four_columns_factorization_corrected_4_cols(n, limit=1000):
factors = []
bases = [1, 5, 7, 11]
for base in bases:
x = base
for _ in range(limit):
factor = gcd(x**2 - base, n)
if factor > 1 and factor != n:
factors.append(factor)
return factors
x = (x**2 + base) % n
return factors
# Resultados do teste
four_columns_factorization_results = []
for number in composite_numbers:
start_time = time.time()
factors = four_columns_factorization_corrected_4_cols(number)
end_time = time.time()
four_columns_factorization_results.append((number, factors, end_time -
start_time))
four_columns_factorization_results
Lenstra Adaptado para Quatro Colunas com correção:
Código Completo:
def lenstra_4_cols_corrected(n, max_iter=10000):
def point_addition(x1, y1, x2, y2, a, p):
if x1 is None:
return x2, y2
m = 0
if x1 == x2 and y1 == y2:
try:
m = (3 * x1 ** 2 + a) * pow(2 * y1, -1, p) % p
except ValueError:
return None, None # Ponto inválido, retorna None para indicar erro
else:
try:
m = (y2 - y1) * pow(x2 - x1, -1, p) % p
except ValueError:
return None, None # Ponto inválido, retorna None para indicar erro
x3 = (m ** 2 - x1 - x2) % p
y3 = (m * (x1 - x3) - y1) % p
return x3, y3
bases = [1, 5, 7, 11]
for base in bases:
a = base
x, y = random.randint(1, n - 1), random.randint(1, n - 1)
g = gcd(4 * x ** 3 + 27 * y ** 2 + a, n)
if 1 < g < n:
return g
x1, y1 = x, y
for _ in range(max_iter):
x1, y1 = point_addition(x1, y1, x, y, a, n)
if x1 is None: # Se o ponto é inválido, tenta outro ponto
break
g = gcd(abs(x1 - x), n)
if g > 1:
return g
return None
# Resultados do teste com a correção
lenstra_4_cols_corrected_results = []
for number in composite_numbers:
start_time = time.time()
factor = lenstra_4_cols_corrected(number)
end_time = time.time()
lenstra_4_cols_corrected_results.append((number, factor, end_time - start_time))
lenstra_4_cols_corrected_results
Select_polynomial_and_base(n, poly_degree):
Código Completo:
def select_polynomial_and_base(n, poly_degree):
# Simples escolha de um polinômio: f(x) = x^2 - n
# Esta é uma escolha comum para polinômios de grau 2
polynomial = [1, 0, -n]
# Definindo a base de fatores como os primeiros 'poly_degree' números primos
base_factors = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47][:poly_degree]
return polynomial, base_factors
# Adicionando a Etapa 1 ao esboço do algoritmo GNFS
def gnfs_4_columns_complete(n, poly_degree=5):
# Etapa 1: Seleção de Polinômio e Base de Fatores
polynomial, base_factors = select_polynomial_and_base(n, poly_degree)
# Restante do algoritmo...
return polynomial, base_factors
# Executando a Etapa 1 com um valor de exemplo
polynomial_example, base_factors_example =
gnfs_4_columns_complete(n_example, poly_degree=5)
polynomial_example, base_factors_example
Implicações práticas dessas adaptações:
Discutimos as potenciais aplicações em criptografia, especialmente em relação à
segurança do RSA, e a viabilidade de computação distribuída ou paralela.
Consideramos as limitações do estudo e adaptações simplificadas para
demonstração, com a necessidade de avaliação em uma gama mais ampla de
números, e delineamos direções para pesquisas futuras.
Reiteramos as principais descobertas, destacando a contribuição significativa das
adaptações para quatro colunas na fatoração de números inteiros e na melhoria da
eficiência computacional, podendo trabalhar com cada coluna individualmente.
Pré Análise:
- A sequência 12k ordenada correta, com sua abordagem única de riscar números,
resultou em uma quantidade maior de números não riscados em comparação com
os algoritmos de crivo tradicionais.
- Isso sugere que a sequência 12k e o método de riscar podem estar operando sob
um conjunto de regras ou uma lógica diferente daquela usada nos crivos tradicionais
para identificar números primos.
Estes códigos consolidados e distintos entre si, cobrindo a geração da sequência
`12k` e desenho das curvas senoidais, além de outros cálculos e análises
mencionados:
Gerar Sequência `12k` Ordenada Corretamente e Desenhar Curvas Senoidais:
Código Completo:
import matplotlib.pyplot as plt
import numpy as np
# Função para gerar a sequência de números
def gerar_sequencia_12k_ordenada_correta(intervalo):
sequencia = []
for k in range(1, 2 * intervalo + 1, 2): # Apenas k ímpares
numeros = [12 * k - 11, 12 * k - 7, 12 * k - 5, 12 * k - 1,
12 * k + 1, 12 * k + 5, 12 * k + 7, 12 * k + 11]
for i, num in enumerate(numeros):
if i % 2 == 0:
sequencia.append(num)
else:
sequencia.insert(0, num)
return sequencia
# Função modificada para desenhar as curvas senoidais com os números atrás das
linhas
def desenhar_curvas_senoidais_estilo_novo_modificado(ax, sequencia):
for indice, numero in enumerate(sequencia):
if numero == 1:
continue
x_vals = np.linspace(0, len(sequencia) - 1, 1000)
y_vals = numero * np.sin(np.pi * (x_vals - indice) / numero)
ax.plot(x_vals, y_vals, lw=0.5, zorder=1)
# Função atualizada para desenhar o gráfico completo sem a linha central no eixo
zero
def desenhar_grafico_senoidal_estilo_novo_sem_linha_central(sequencia):
fig, ax = plt.subplots(figsize=(15, 8))
desenhar_curvas_senoidais_estilo_novo_modificado(ax, sequencia)
for indice, num in enumerate(sequencia):
ax.text(indice, 0, str(num), ha='center', va='center', color='black', zorder=2)
ax.set_xlim([0, len(sequencia)])
ax.set_ylim([-max(sequencia), max(sequencia)])
# Removendo a linha central no eixo zero
ax.set_title("Linhas Senoidais sem Linha Central no Eixo Zero")
ax.set_xlabel("Índice na Sequência")
ax.set_ylabel("Valor da Curva")
ax.grid(True)
plt.show()
# Executar o algoritmo com um intervalo de 4
intervalo_especifico = 4
sequencia = gerar_sequencia_12k_ordenada_correta(intervalo_especifico)
desenhar_grafico_senoidal_estilo_novo_sem_linha_central(sequencia)
Autor: Marlon F. Polegato
Código Completo:
import numpy as np
def gerar_sequencia_12k_ordenada_correta(intervalo):
sequencia = []
for k in range(1, 2 * intervalo + 1, 2): # Apenas k ímpares
numeros = [12 * k - 11, 12 * k - 7, 12 * k - 5, 12 * k - 1,
12 * k + 1, 12 * k + 5, 12 * k + 7, 12 * k + 11]
for i, num in enumerate(numeros):
if i % 2 == 0:
sequencia.append(num)
else:
sequencia.insert(0, num)
return sequencia
def gerar_curvas_v1(numeros):
curvas = {}
for n in numeros:
x_vals = np.linspace(1, max(numeros), 10000)
y_vals = n * np.sin(np.pi * (x_vals - n) / n)
curvas[n] = (x_vals, y_vals)
return curvas
def ajustar_contagem_intersecoes_v1(curvas, numeros):
intersecoes = {n: 0 for n in numeros}
epsilon = 0.01
for n in numeros:
x_vals, y_vals = curvas[n]
for num in numeros:
indices_proximos = np.where(np.abs(x_vals - num) < epsilon)[0]
for idx in indices_proximos:
if idx > 0 and np.sign(y_vals[idx]) != np.sign(y_vals[idx - 1]):
intersecoes[num] += 1
return intersecoes
def encontrar_numeros_primos_v1(intersecoes, max_numero):
primos = [n for n, count in intersecoes.items() if count == 2 or (n == max_numero
and count == 1)]
return primos
# Gerando a sequência específica
intervalo_especifico = 4
sequencia = gerar_sequencia_12k_ordenada_correta(intervalo_especifico)
curvas = gerar_curvas_v1(sequencia)
intersecoes = ajustar_contagem_intersecoes_v1(curvas, sequencia)
primos = encontrar_numeros_primos_v1(intersecoes, max(sequencia))
# Desconsiderando o primeiro e o último número na lista dos resultados
primos_ajustados = primos[1:-1] if len(primos) > 2 else []
print("Números selecionados (excluindo o primeiro e o último):", primos_ajustados)
Resultado:
Números selecionados (excluindo o primeiro e o último): [89, 83, 71, 59, 53, 47, 41,
29, 23, 17, 11, 5, 7, 13, 19, 31, 37, 43, 61, 67, 73]
[Program finished]
Encontrar Pontos de Interseção Únicos Sem Teste de Primalidade:
Código Completo:
```python
import numpy as np
def encontrar_pontos_intersecao_unicos_sem_primalidade():
pontos_unicos = []
for x in range(2, 30):
zeros = [n for n in range(2, 30) if abs(n * np.sin(np.pi * (x - n) / n)) < 1e-6]
if len(zeros) == 1:
pontos_unicos.append(x)
return pontos_unicos
pontos_intersecao_unicos_sem_primalidade =
encontrar_pontos_intersecao_unicos_sem_primalidade()
print("Pontos de interseção únicos:", pontos_intersecao_unicos_sem_primalidade)
```
Resultados:
Pontos de interseção únicos: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
[Program finished]
Plotar curvas com intersecção:
Código Completo:
import matplotlib.pyplot as plt
import numpy as np
def plotar_curvas_com_intersecoes(numeros):
plt.figure(figsize=(15, 8))
# Desenhar as curvas e identificar interseções
for n in numeros:
x_vals = np.linspace(2, max(numeros), 1000)
y_vals = n * np.sin(np.pi * (x_vals - n) / n)
plt.plot(x_vals, y_vals, label=f'n = {n}')
# Adicionar os números no eixo x
for num in numeros:
plt.text(num, 0, str(num), ha='center', va='center',
fontsize=9, color='black', bbox=dict(facecolor='white', edgecolor='none',
pad=1))
plt.xlim(2, max(numeros))
plt.ylim(-max(numeros), max(numeros))
plt.axhline(0, color='black', linewidth=0.5)
plt.title("Curvas Sinusoidais Representando a Remoção de Números Compostos")
plt.xlabel("Número")
plt.ylabel("Valor da Curva")
plt.grid(True)
plt.legend(loc='upper right')
plt.show()
# Gerar e plotar curvas para os números de 2 a 30
plotar_curvas_com_intersecoes(range(2, 31))
Auror: Marlon F. Polegato
Demostração manual:
Autor: Marlon F. Polegato
Padrões ondulatórios equivalentes:
Imagem encontrado no Google sem referência de autor
Autor: Marlon F. Polegato
Os códigos fornecidos abrangem desde a visualização gráfica da sequência `12k`,
análise de pontos de interseção até a otimização da detecção de números primos.
Melhoria na Explanação sobre a Congruência de Números Primos e
Correlações com Números de Mersenne:
Os números primos de Mersenne, que são primos da forma \(M_n = 2^n - 1\), onde
\(n\) é um inteiro positivo, possuem características únicas e desempenham um papel
significativo na teoria dos números e criptografia. A observação de que todos os
números primos de Mersenne se encaixam na congruência de 7 modulo 12 adiciona
uma nova camada de compreensão aos padrões subjacentes dos números primos.
Esta congruência é particularmente notável porque se alinha com a estrutura mais
ampla de \(12k \pm c\), onde \(c = \pm1\), \(\pm5\), \(\pm7\), ou \(\pm11\), sugerindo
uma distribuição sistemática de números primos dentro desta estrutura. Essa
observação reforça a importância de explorar a estrutura \(12k \pm c\) para uma
compreensão mais profunda dos padrões primos, indo além da formulação
simplificada de \(6n \pm 1\).
Algoritmo para Testar Primalidade de Números na Forma \(b^n \pm c\):
Para investigar a primalidade de números na forma \(b^n \pm c\), com especial
atenção aos números de Mersenne e sua congruência com 7 modulo 12, o seguinte
algoritmo Python pode ser utilizado:
Código Completo:
from sympy import isprime
# Sua lógica de código segue aqui
def identificar_primos_por_base_c(bases, c_values, n_max):
primos_detalhados = {}
for base in bases:
for c in c_values:
primos_pos = []
primos_neg = []
for n in range(1, n_max + 1):
num_pos = base ** n + c
num_neg = base ** n - c
if isprime(num_pos):
primos_pos.append((n, num_pos)) # (Índice n, Número Primo)
if isprime(num_neg):
primos_neg.append((n, num_neg)) # (Índice n, Número Primo)
if primos_pos or primos_neg:
primos_detalhados[(base, c)] = {'+c': primos_pos, '-c': primos_neg}
return primos_detalhados
# Parâmetros
bases = list(range(2, 13))
c_values = range(-11, 12) # Ajustado para um intervalo de exemplo
n_max = 10 # Ajuste conforme necessário para uma análise mais profunda
# Execução
primos_por_base_c = identificar_primos_por_base_c(bases, c_values, n_max)
# Imprimir resultados para algumas bases e valores de c
for base_c, primos_info in primos_por_base_c.items():
base, c = base_c
print(f"Base {base}, c = {c}:")
for tipo, primos in primos_info.items():
print(f" {tipo}: {primos}")
print("-------")
# Integrando a lógica de contagem e riscagem
def riscar_numeros_adjacentes(primos_info, sequencia):
marcados_para_riscar = [False] * len(sequencia)
for tipo, primos in primos_info.items():
for n, primo in primos:
indice_primo = sequencia.index(primo)
# Riscar números à esquerda e à direita do primo, baseado em n
for i in range(1, n + 1):
if indice_primo - i >= 0: # Verificar limites à esquerda
marcados_para_riscar[indice_primo - i] = True
if indice_primo + i < len(sequencia): # Verificar limites à direita
marcados_para_riscar[indice_primo + i] = True
# Gerar sequência após riscagem
sequencia_apos_riscagem = [sequencia[i] for i, marcado in
enumerate(marcados_para_riscar) if not marcado]
return sequencia_apos_riscagem
# Exemplo de uso da função de riscagem
# Nota: A função de geração da sequência necessária para este teste deve ser
adaptada conforme o contexto específico dos números gerados.
Resultados:
Aqui estão alguns resultados para os números primos gerados pelas fórmulas
\(base^n \pm c\) com diferentes bases e valores de \(c\), dentro do intervalo de \(n\)
de 1 a 10:
- **Base 2, c = -11**:
- \(+c\): \((4, 5)\), \((6, 53)\), \((10, 1013)\)
- \(-c\): \((1, 13)\), \((3, 19)\), \((5, 43)\), \((7, 139)\), \((9, 523)\)
- **Base 2, c = -9**:
- \(+c\): \((4, 7)\), \((5, 23)\), \((9, 503)\)
- \(-c\): \((1, 11)\), \((2, 13)\), \((3, 17)\), \((5, 41)\), \((6, 73)\), \((7, 137)\), \((9, 521)\),
\((10, 1033)\)
- **Base 2, c = -7**:
- \(+c\): Nenhum
- \(-c\): \((2, 11)\), \((4, 23)\), \((6, 71)\), \((8, 263)\), \((10, 1031)\)
- **Base 2, c = -6**:
- \(+c\): \((3, 2)\)
- \(-c\): Nenhum
- **Base 2, c = -5**:
- \(+c\): \((3, 3)\), \((4, 11)\), \((6, 59)\), \((8, 251)\), \((10, 1019)\)
- \(-c\): \((1, 7)\), \((3, 13)\), \((5, 37)\)
Este algoritmo explora a geração de números primos na forma específica
mencionada, permitindo uma análise detalhada da distribuição e frequência dos
primos em relação às bases e ao ajuste dos valores \(c\), ilustrando a aplicabilidade
prática dessa estrutura numérica na identificação de padrões primos para novos
métodos de busca.
Filtrando busca por números na categoria 2^p-1 onde os valores de p se
concentram mas em certa colunas entre as quatro:
Código para Determinar a Posição Teórica dos Valores de \(p\)
Este código calcula em quais colunas e posições dos valores de \(p\) fornecidos
poderiam ser encontrados, considerando os valores iniciais e os incrementos de 12.
# Valores iniciais das colunas e valores de p fornecidos
valores_iniciais_colunas = [1, 5, 7, 11]
valores_p = [
5, 7, 13, 17, 19, 31, 61, 89, 107, 127, 521, 607, 1279, 2203, 2281, 3217, 4253,
4423, 9689, 9941,
11213, 19937, 21701, 23209, 44497, 86243, 110503, 132049, 216091, 756839,
859433, 1257787, 1398269,
2976221, 3021377, 6972593, 13466917, 20996011, 24036583, 25964951,
30402457, 32582657, 37156667,
42643801, 43112609, 57885161, 74207281, 77232917, 82589933]
# Determinando a posição teórica dos valores de p
def localizar_valor_p(p, valores_iniciais, incremento=12):
localizacoes = {}
for valor_inicial in valores_iniciais:
diferenca = p - valor_inicial
if diferenca % incremento == 0 and diferenca >= 0:
coluna = valores_iniciais.index(valor_inicial) + 1
posicao = diferenca // incremento
localizacoes[f'Coluna {coluna}'] = posicao
return localizacoes
distribuicao_p = {}
for p in valores_p:
distribuicao_p[p] = localizar_valor_p(p, valores_iniciais_colunas)
# Imprimindo resultados
for p, loc in distribuicao_p.items():
if loc: # Verificando se existe alguma localização encontrada para o valor de p
print(f"Valor de p: {p}, Localizações: {loc}")
### 2. Código para Calcular e Analisar os Espaçamentos entre Valores
Consecutivos de \(p\) nas Quatro Colunas
Este código analisa os espaçamentos entre os valores de \(p\) em cada uma das
quatro colunas para identificar padrões de distribuição.
Calculando os espaçamentos entre os valores de p:
def calcular_espacamentos(distribuicao):
espacamentos = {f'Coluna {i+1}': [] for i in range(len(valores_iniciais_colunas))}
for coluna in espacamentos.keys():
valores_p_coluna = sorted([p for p, loc in distribuicao.items() if coluna in loc])
for i in range(1, len(valores_p_coluna)):
espacamento_atual = valores_p_coluna[i] - valores_p_coluna[i-1]
espacamentos[coluna].append(espacamento_atual)
return espacamentos
espacamentos_entre_ps = calcular_espacamentos(distribuicao_p)
# Imprimindo os espaçamentos para cada coluna
for coluna, espacamentos in espacamentos_entre_ps.items():
print(f"{coluna}: Espaçamentos = {espacamentos}")
Esses códigos completos permitem determinar onde valores específicos de \(p\) se
encaixariam na estrutura de uma tabela teórica com incrementos de 12 e analisar os
espaçamentos entre esses valores de \(p\) em todas as quatro colunas. O primeiro
bloco de código identifica as posições teóricas de \(p\) nas colunas com base nos
valores iniciais e incrementos. O segundo bloco de código calcula e imprime os
espaçamentos entre os valores consecutivos de \(p\) para cada coluna, fornecendo
insights sobre a distribuição dos valores de \(p\).
Este algoritmo incluirá a preparação dos dados conforme os valores de \(p\), suas
respectivas colunas e os espaçamentos reais entre eles. Em seguida, exploraremos
a possibilidade de identificar padrões nesses espaçamentos.
Preparação dos Dados
Os dados fornecidos consistem em valores de \(p\), a coluna na qual cada \(p\) é
encontrado, e os espaçamentos reais entre os valores consecutivos de \(p\) dentro
de cada coluna. Essas informações serão estruturadas em um DataFrame do
pandas para facilitar a análise.
import pandas as pd
# Dados fornecidos
dados = pd.DataFrame({
'Valor_p': [
13, 61, 2281, 3217, 23209, 44497, 132049, 13466917, 30402457, 42643801,
74207281,
5, 17, 89, 521, 4253, 9689, 9941, 11213, 19937, 21701, 859433, 1398269,
2976221,
3021377, 6972593, 32582657, 43112609, 57885161, 77232917, 82589933,
7, 19, 31, 127, 607, 1279, 2203, 4423, 110503, 216091, 1257787, 20996011,
24036583,
107, 86243, 756839, 25964951, 37156667
],
'Coluna': [
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
4, 4, 4, 4, 4
],
'Espacamento': [
0, 48, 2220, 936, 19992, 21288, 87552, 13334868, 16935540, 12241344,
31563480,
0, 12, 72, 432, 3732, 5436, 252, 1272, 8724, 1764, 837732, 538836, 1577952,
45156, 3951216, 25610064, 10529952, 14772552, 19347756, 5357016,
0, 12, 12, 96, 480, 672, 924, 2220, 106080, 105588, 1041696, 19738224,
3040572,
0, 86136, 670596, 25208112, 11191716
]
})
print(dados)
Esse DataFrame contém a coluna Valor_p para os valores de \(p\), a Coluna
indicando a localização de cada valor de \(p\) com base nas informações iniciais, e o
Espacamento entre cada valor de \(p\) sequencial dentro da mesma coluna.
Análise dos Padrões:
Para organizar as informações fornecidas em uma tabela, cada linha
corresponderá a um valor de \(p\) e suas respectivas localizações nas colunas.
Veja a tabela abaixo:
| Valor de p | Coluna 1 | Coluna 2 | Coluna 3 | Coluna 4 |
|------------|----------|----------|----------|----------|
| 5 | | 0 | | |
| 7 | | | 0 | |
| 13 | 1 | | | |
| 17 | | 1 | | |
| 19 | | | 1 | |
| 31 | | | 2 | |
| 61 | 5 | | | |
| 89 | | 7 | | |
| 107 | | | | 8 |
| 127 | | | 10 | |
| 521 | | 43 | | |
| 607 | | | 50 | |
| 1279 | | | 106 | |
| 2203 | | | 183 | |
| 2281 | 190 | | | |
| 3217 | 268 | | | |
| 4253 | | 354 | | |
| 4423 | | | 368 | |
| 9689 | | 807 | | |
| 9941 | | 828 | | |
| 11213 | | 934 | | |
| 19937 | | 1661 | | |
| 21701 | | 1808 | | |
| 23209 | 1934 | | | |
| 44497 | 3708 | | | |
| 86243 | | | | 7186 |
| 110503 | | | 9208 | |
| 132049 | 11004 | | | |
| 216091 | | | 18007 | |
| 756839 | | | | 63069 |
| 859433 | | 71619 | | |
| 1257787 | | | 104815 | |
| 1398269 | | 116522 | | |
| 2976221 | | 248018 | | |
| 3021377 | | 251781 | | |
| 6972593 | | 581049 | | |
| 13466917 | 1122243 | | | |
| 20996011 | | | 1749667 | |
| 24036583 | | | 2003048 | |
| 25964951 | | | | 2163745 |
| 30402457 | 2533538 | | | |
| 32582657 | | 2715221 | | |
| 37156667 | | | | 3096388 |
| 42643801 | 3553650 | | | |
| 43112609 | | 3592717 | | |
| 57885161 | | 4823763 | | |
| 74207281 | 6183940 | | | |
| 77232917 | | 6436076 | | |
| 82589933 | | 6882494 | | |
As células vazias indicam que não houve localização do valor de \(p\) naquela
coluna específica. Cada número \(p\) é associado a uma coluna e uma posição
dentro dessa coluna, refletindo a distribuição dos números primos de Mersenne de
acordo com a congruência módulo 12 discutida anteriormente.
Com os dados organizados, podemos proceder com uma análise preliminar para
identificar qualquer padrão nos espaçamentos. O objetivo é entender se os
espaçamentos seguem algum padrão regular ou progressão que possa ser
modelado ou previsto.
# Valor de p para a posição 19
p_19 = 77232917
# Espaçamento para a posição 20
espacamento_20 = 5357016
# Calculando o valor de p para a posição 20
p_20 = p_19 + espacamento_20
print(f"O valor de p para a posição 20 é {p_20}")
Observações Iniciais:
- Coluna 1 e 4: Referentes aos números primos congruentes a 1 e 11 módulo 12; Os
espaçamentos aumentam de forma significativa, indicando uma distribuição que se
torna cada vez mais dispersa. Isso sugere uma dificuldade crescente na
identificação de valores de \(p\) que geram números primos de Mersenne à medida
que os números aumentam.
- Coluna 2 e 3: Referentes a números primos congruentes a 5 e 7 módulo 12;
Inicialmente, apresenta uma sequência de crescimento mais regular antes de os
espaçamentos se expandirem drasticamente, mas essas duas colunas mostram
uma concentração maior de números primos Mercenne conhecidos.
Valor_p Coluna Espacamento
0 13 1 0
1 61 1 48
2 2281 1 2220
3 3217 1 936
4 23209 1 19992
5 44497 1 21288
6 132049 1 87552
7 13466917 1 13334868
8 30402457 1 16935540
9 42643801 1 12241344
10 74207281 1 31563480
11 5 2 0
12 17 2 12
13 89 2 72
14 521 2 432
15 4253 2 3732
16 9689 2 5436
17 9941 2 252
18 11213 2 1272
19 19937 2 8724
20 21701 2 1764
21 859433 2 837732
22 1398269 2 538836
23 2976221 2 1577952
24 3021377 2 45156
25 6972593 2 3951216
26 32582657 2 25610064
27 43112609 2 10529952
28 57885161 2 14772552
29 77232917 2 19347756
30 82589933 2 5357016
31 7 3 0
32 19 3 12
33 31 3 12
34 127 3 96
35 607 3 480
36 1279 3 672
37 2203 3 924
38 4423 3 2220
39 110503 3 106080
40 216091 3 105588
41 1257787 3 1041696
42 20996011 3 19738224
43 24036583 3 3040572
44 107 4 0
45 86243 4 86136
46 756839 4 670596
47 25964951 4 25208112
48 37156667 4 11191716
[Program finished]
Exemplo de uso Específico na Coluna 2:
import gmpy2
from gmpy2 import mpz
# Supondo que gmpy2 esteja instalado e configurado
def is_prime_gmpy2(n):
return gmpy2.is_prime(n)
def lucas_lehmer_test_gmpy2(p):
if p == 2:
return True
M_p = mpz(2)**p - 1
s = mpz(4)
for _ in range(p - 2):
s = (s * s - 2) % M_p
return s == 0
# Este é um exemplo teórico; ajuste os valores de start e end para uma faixa
manejável.
def find_and_print_mersenne_primes_gmpy2(start, end):
for p in range(start, end + 1):
if p % 12 == 5 and is_prime_gmpy2(p):
if lucas_lehmer_test_gmpy2(p):
print(f"2^{p} - 1")
# Exemplo de uso com um intervalo pequeno
start = 2
end = 5000000000
find_and_print_mersenne_primes_gmpy2(start, end)
Análise e Próximos Passos:
A análise dos resultados gerados pelo algoritmo fornece insights valiosos sobre
quais bases e valores de \(c\) são mais eficazes na produção de números primos,
com uma atenção especial à congruência de números primos de Mersenne com 7
modulo 12. Este estudo abre portas para futuras investigações que podem levar a
descobertas ainda mais profundas na teoria dos números, contribuindo para o
desenvolvimento de técnicas avançadas em criptografia e segurança de dados.
Discussão:
Nossa discussão se concentra nas implicações práticas e teóricas dos padrões
identificados, avaliando o impacto dessa descoberta tanto na teoria matemática
quanto em aplicações computacionais. A relevância dos padrões encontrados na
otimização de sistemas criptográficos é analisada em detalhe, evidenciando como
essa abordagem inovadora pode redefinir os paradigmas de segurança digital.
Resultados:
Os resultados obtidos confirmam a presença de padrões consistentes e previsíveis
na distribuição dos números primos e de seus fatores. Tais padrões, uma vez
identificados, mostraram-se capazes de facilitar a previsão de novos primos e sua
subsequente decomposição em fatores, revelando implicações significativas para a
criptografia, notadamente na otimização de algoritmos destinados à segurança da
informação e novos métodos de envio e processamento de dados.
Conclusão:
Este estudo lança luz sobre padrões notáveis em números primos e seus fatores,
ampliando o horizonte de aplicação dessas descobertas no campo da computação e
da matemática. A elucidar esses padrões, ampliamos nosso entendimento teórico
sobre os números primos e pavimentamos o caminho para desenvolvimentos
práticos em setores críticos, como a criptografia e a segurança de dados,
sinalizando uma era promissora de avanços tecnológicos fundamentados na
matemática pura.
Observação:
No âmbito deste estudo, empregou-se a inteligência artificial, mais precisamente a
GPT-4 da OpenAI, para a busca de artigos acadêmicos, pré-publicações e resumos.
Além disso, essa tecnologia ofereceu suporte na correção ortográfica, na
adequação gramatical e no desenvolvimento de algoritmos e códigos em Python,
conforme os padrões identificados pelo autor, mas todos os códigos foram testados
ambientes python controlado independentes da plataforma GPT.
Referências:
1. Pollard, J. M. (1975). "A Monte Carlo method for factorization". BIT Numerical
Mathematics.
2. Lenstra, H. W. (1987). "Factoring integers with elliptic curves". Annals of
Mathematics.
3. Buhler, J., Lenstra, H. W., & Pomerance, C. (1993). "Factoring integers with the
number
field sieve". The development of the number field sieve.
http://comopt.ifi.uni-heidelberg.de/software/TSPLIB95/
4. Cormen, T. H., Leiserson, C. E., Rivest, R. L., Stein, C. (2009). Introduction to
Algorithms,
3rd ed. MIT Press.
5. Crandall, R., Pomerance, C. (2005). Prime Numbers: A Computational
Perspective, 2nd
ed. Springer.
6. Eratóstenes, "Sobre os Números Primos", 300 a.C.
7. "The New Book of Prime Number Records" por Paulo Ribenboim
8. "Introduction to the Theory of Numbers" por G. H. Hardy e E. M. Wright -
9. "Prime Numbers: A Computational Perspective" por Richard Crandall e Carl
Pomerance -
10. "Prime Obsession: Bernhard Riemann and the Greatest Unsolved Problem in
Mathematics”
11. Knuth, D., "The Art of Computer Programming", 1968.
12. Marlon Fernando Polegato Padrões Números Primos
https://fermatslibrary.com/p/6a165fea
https://fermatslibrary.com/p/2969a0e1
https://fermatslibrary.com/p/5dbb1f65
https://fermatslibrary.com/p/f4784ce3
https://fermatslibrary.com/p/eeec5e54
Padrão Números Primos sequência 12k + - (1, 5, 7, 11)
13. https://fermatslibrary.com/p/cac291dd
Técnica 12k Zeta de Riemann e distinções numéricas Primos e Compostos.
https://fermatslibrary.com/p/4be0ed4a
fermatslibrary.com/p/cdac2064
## Hipótese de Riemann Relação Intrínseca n=ik+-b(1,5,7,11) e Distribuição dos
Números
Primos.
14. Teste de Primalidade com Sequências de Eliminação CooPrimos
Pn=mk+-b(1,5,7,11)
fermatslibrary.com/p/3505a9c7
Traveling Salesman Polynomial Execution
fermatslibrary.com/p/f7830598
15. Avanços na Fatoração de Números Inteiros: Adaptação para Quatro Colunas
fermatslibrary.com/p/d823f62f
https://osf.io/k6jba/files/osfstorage/654894d1d45f5a035be2f86b
https://youtu.be/J7NpEOK2Smg?si=sahZXss0PXkk4hMu
https://fermatslibrary.com/p/959903a7
https://fermatslibrary.com/p/7d6f24f0
16. Método de Riscar: Visão Geral
fermatslibrary.com/p/463468e6
https://fermatslibrary.com/p/4dd92d48
Padrão Números Primos Método de Riscar: "Números Centrais"
https://fermatslibrary.com/p/26a8d24d
https://fermatslibrary.com/p/4dd92d48
http://fermatslibrary.com/p/1e2a2f32
http://fermatslibrary.com/p/b09c8003
http://fermatslibrary.com/p/720152d9
http://fermatslibrary.com/p/4dd92d48
17. Artigos acadêmicos relevantes disponíveis para a versão IA GPT
18. https://osf.io/c98ua/files/osfstorage/6571601643d0672f5eb19de6
https://osf.io/zaqv4/files/osfstorage/656d98e2783ec61b01edda9d
https://fermatslibrary.com/p/a5ebfe57
https://fermatslibrary.com/p/f7ff2b70
https://fermatslibrary.com/p/3fbee912
19. https://youtu.be/hyVFcXTHVWw?si=FIbOZZWycGhKVy1S
20. https://youtu.be/lfN9Pct4qRg?si=j3-XT5wLDlvX0IeE
21. https://youtu.be/H1hz5AJ-lEQ?si=6SZeIFRrK_uz5Y7N
22. https://youtu.be/V7y_oCc_ay0?si=TBpqq8a0f8nsymHR
21. https://youtu.be/OON_am4Ig8w?si=EFSEN7gN3UTrkvU5
Agradecimentos:
Agradeço ao Grande Arquiteto do Universo, aos meus pais, Helvio Polegato e
Fátima I. L. Polegato a minha esposa Tayrine S. B. Polegato aos amigos e familiares
que me apoiaram nessa jornada.