Teste de primalidade de Proth com testemunha
O teste de primalidade de Proth verifica um número escrito como k × 2^n + 1 aplicando o teorema de Proth à testemunha fornecida por você.
Executar grátis
Primeiro, confirma que k é positivo e ímpar, n é positivo e k é menor que 2^n. Depois, calcula exatamente a potência modular necessária. Uma congruência válida prova que o número de Proth é primo; uma testemunha que falha gera resultado inconclusivo, exceto quando revela um fator.
Informe um número de Proth legítimo e uma testemunha
Um número de Proth tem a forma exata N = k × 2^n + 1, na qual k é um inteiro positivo ímpar, n é um inteiro positivo e k é estritamente menor que 2^n. Todas essas condições são essenciais. A calculadora recebe k e a testemunha como texto decimal para preservar valores grandes, sem arredondamento de ponto flutuante. Informe n como inteiro entre 1 e 10,000. A ferramenta constrói N em vez de pedir esse valor separadamente, evitando divergências entre o número declarado e os parâmetros que o definem. Ela também verifica se a testemunha está estritamente entre 1 e N. Entradas com k par, valor não positivo ou k maior ou igual a 2^n são rejeitadas por não serem de Proth, em vez de serem submetidas a um teorema cujas hipóteses não se aplicam. O número, o expoente, a testemunha e o resíduo são devolvidos como strings decimais quando necessário, permitindo que você audite o cálculo e copie os valores para outra ferramenta de aritmética exata.
Entenda o que a congruência realmente prova
Para um número de Proth válido N, o teorema afirma que N é primo se existir um inteiro a para o qual a^((N−1)/2) seja congruente a −1 módulo N. A testemunha fornecida corresponde a a, e a calculadora avalia a potência modular por quadrados sucessivos, sem construir primeiro a gigantesca potência comum. Na saída, `residue` é o menor resíduo não negativo, e `passes_test` é true exatamente quando ele equivale a N−1, a representação modular de −1. Nesse caso, `prime_proven` é true e o veredito é `prime`: trata-se de um certificado determinístico sob as condições de Proth já validadas, e não de um palpite de primo provável. A resposta inclui o expoente exato (N−1)/2 para que você reproduza a congruência de forma independente. O algoritmo usa somente operações inteiras, não seleciona testemunhas aleatoriamente e não consulta tabelas nem serviços remotos. Assim, a mesma entrada sempre produz o mesmo resultado e expõe todos os valores importantes empregados no teorema.
Interprete corretamente uma testemunha que falha
Uma testemunha que não produz −1 não prova, por si só, que o número é composto. Ela apenas indica que essa testemunha específica não satisfez a condição suficiente do teorema de Proth. Por isso, a calculadora retorna `inconclusive`, e não `composite`, quando o resíduo é diferente e a testemunha é coprima com N. Você pode então tentar outra testemunha escolhida matematicamente ou usar um método determinístico de primalidade diferente. Há uma exceção útil: antes de interpretar a congruência, a calculadora determina o máximo divisor comum entre a testemunha e N. Se esse valor for um fator próprio, o resultado será conclusivamente `composite`, e o fator será apresentado. Essa distinção evita o erro comum de transformar um teorema de sentido único em um teste bidirecional inválido. Ela também ajuda em fluxos automatizados: aceite `prime` como prova, rejeite `composite` quando surgir um fator e encaminhe `inconclusive` para outro teste, sem tratá-lo silenciosamente como uma falha definitiva.
Casos de uso
Verificar um candidato de uma busca
Teste um par k e n gerado com uma testemunha escolhida antes de registrar o candidato como primo comprovado.
Ensinar o teorema de Proth
Apresente o expoente exato, o resíduo modular e a diferença entre uma prova e uma testemunha inconclusiva.
Adicionar uma verificação determinística
Valide as condições de Proth e encaminhe resultados primos, compostos e inconclusivos sem aritmética de ponto flutuante.
Perguntas frequentes
Quanto custa uma solicitação API?
Cada solicitação API custa US$ 0,002. O cálculo também pode ser executado gratuitamente no navegador.
O que torna uma entrada um número de Proth?
Ela deve ser igual a k × 2^n + 1, com k positivo e ímpar, n positivo e k < 2^n.
Uma testemunha que falha prova que o número é composto?
Não. Normalmente, o resultado é inconclusivo. A composição só é declarada quando a testemunha revela um fator comum não trivial.
Por que k e a testemunha são informados como strings?
Strings decimais preservam inteiros maiores que o intervalo numérico seguro do JavaScript sem arredondamento.
Um resultado positivo é probabilístico?
Não. Depois que as condições de Proth são validadas, a congruência exigida constitui uma prova de primalidade.
As testemunhas são selecionadas automaticamente?
Não. Você fornece a testemunha, e a capacidade testa deterministicamente esse valor exato.
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
curl -X POST https://api.kit.forhosting.com/numth/proth-test \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"k":"3","n":3,"witness":"3"}'const res = await fetch("https://api.kit.forhosting.com/numth/proth-test", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"k": "3",
"n": 3,
"witness": "3"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/numth/proth-test",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"k": "3",
"n": 3,
"witness": "3"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/numth/proth-test", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"k":"3","n":3,"witness":"3"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"k":"3","n":3,"witness":"3"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/numth/proth-test", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemplo de requisição
{
"k": "3",
"n": 3,
"witness": "3"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "numth.proth_test",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Limites
max_n | 10000 |
max_decimal_digits | 3011 |
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |