Verificador de pseudoprimos de Fermat para qualquer base
O verificador de pseudoprimos de Fermat recebe um inteiro composto n e uma base a, calcula exatamente o resto de a elevado a n menos um módulo n e informa se esse resto é um.
Executar grátis
Um composto aprovado é pseudoprimo de Fermat para a base escolhida: ele se comporta como primo nesse teste específico, embora não seja primo. O resultado também apresenta o máximo divisor comum, facilitando sua análise e explicação.
O que um resultado positivo realmente significa
O pequeno teorema de Fermat afirma que, se n é primo e a não é divisível por n, então a elevado a n menos um deixa resto um módulo n. A recíproca não é garantida. Alguns inteiros compostos também produzem resto um para determinadas bases; eles são chamados de pseudoprimos de Fermat nessas bases. Este verificador exige que n seja composto, confirma primeiro essa condição e depois avalia a congruência com exatidão. Quando passes_fermat_test e is_fermat_pseudoprime são verdadeiros, isso significa que o composto informado enganou o teste de Fermat para aquela base específica. Não significa que n seja primo, provavelmente primo ou pseudoprimo em todas as bases. A base faz parte da afirmação e deve sempre acompanhar o resultado. O resto retornado fornece a evidência aritmética direta: um representa aprovação e qualquer outro valor representa reprovação. O máximo divisor comum também é exibido porque um divisor não trivial explica muitas falhas e ajuda você a distinguir experiências com bases coprimas de entradas que já revelam uma relação de fatores.
Como o cálculo permanece exato
As duas entradas são strings decimais para que inteiros acima do intervalo numérico seguro do JavaScript não sejam arredondados antes do cálculo. O intervalo aceito termina no maior inteiro sem sinal de 64 bits, estabelecendo um limite claro e verificável para o teste de primalidade. Antes do teste de Fermat, o verificador usa Miller–Rabin determinístico com um conjunto de testemunhas suficiente para todo esse intervalo. Se um primo for detectado, ocorre um erro de entrada, pois números primos satisfazem o teorema, mas não podem ser pseudoprimos por definição. Para um composto válido, a exponenciação modular usa quadrados sucessivos em vez de construir o enorme valor a^(n-1). Cada multiplicação é reduzida módulo n, mantendo os valores intermediários limitados e exatos com BigInt. O algoritmo de Euclides calcula gcd(a,n) separadamente. A base precisa satisfazer 2 <= a <= n - 2. Nenhuma testemunha aleatória, data, chamada de rede ou operação de ponto flutuante interfere na resposta, portanto entradas idênticas sempre geram saídas idênticas.
Uso em estudos e fluxos de verificação
Um exemplo clássico usa n = 341 e a base a = 2. Como 341 é composto, mas 2^340 é congruente a um módulo 341, ele passa e é pseudoprimo de Fermat na base dois. Ao mudar a base, o mesmo composto pode falhar, razão pela qual um único teste de Fermat não é um certificado geral de primalidade. Em uma aula, a saída estruturada permite ligar diretamente a definição ao resto calculado. Em testes de software, você pode guardar vetores conhecidos de pseudoprimos e não pseudoprimos sem depender de uma biblioteca matemática ou de conversões numéricas específicas da máquina. Para explorar, compare várias bases permitidas mantendo n fixo e observe a importância da escolha da testemunha. Trate um resultado verdadeiro como demonstração da limitação do teste de Fermat, não como permissão para aceitar o número como primo em código criptográfico ou sensível à segurança. A API custa US$ 0,002 por par verificado, enquanto a versão no navegador executa localmente o mesmo cálculo determinístico.
Casos de uso
Demonstrar um pseudoprimo clássico
Verifique que um composto conhecido como 341 passa na congruência de Fermat na base 2 e examine o resto exato.
Criar exercícios de teoria dos números
Confira gabaritos de questões que perguntam se certo composto é pseudoprimo em uma base especificada.
Testar implementações aritméticas
Use resultados estruturados e determinísticos como vetores de referência para exponenciação modular ou código didático de primalidade.
Perguntas frequentes
Quando n é pseudoprimo de Fermat na base a?
Ele deve ser composto e satisfazer a congruência a^(n-1) igual a 1 módulo n para a base informada.
Por que o verificador rejeita n primo?
Primos normalmente passam na congruência de Fermat, mas pseudoprimo é um termo reservado a inteiros compostos; aceitar um primo responderia outra pergunta.
Um resultado verdadeiro prova que n é primo?
Não. O verificador já estabelece que n é composto. O resultado verdadeiro mostra exatamente como esse composto engana o teste em uma base.
Por que n e a são informados como strings?
Strings decimais preservam todos os dígitos na API e no navegador, inclusive acima do intervalo seguro dos números comuns do JavaScript.
Qual é o preço?
A API custa US$ 0,002 por par verificado. O executor no navegador realiza localmente o mesmo cálculo.
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/fermat-pseudoprime-check \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"n":"341","a":"2"}'const res = await fetch("https://api.kit.forhosting.com/numth/fermat-pseudoprime-check", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"n": "341",
"a": "2"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/numth/fermat-pseudoprime-check",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"n": "341",
"a": "2"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/numth/fermat-pseudoprime-check", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"n":"341","a":"2"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"n":"341","a":"2"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/numth/fermat-pseudoprime-check", 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
{
"n": "341",
"a": "2"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "numth.fermat_pseudoprime_check",
"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_digits | 20 |
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. |