Teste de primalidade de Lucas
Este verificador do teste de primalidade de Lucas transforma um certificado matemático compacto em um resultado de primalidade reproduzível.
Executar grátis
Forneça um inteiro ímpar n, uma testemunha de Lucas proposta e a fatoração prima completa de n menos um. A calculadora valida a própria fatoração, avalia as potências modulares e os máximos divisores comuns exigidos e só certifica n quando todas as condições do teorema de Lucas são satisfeitas. Strings decimais preservam inteiros exatos, inclusive valores acima do intervalo numérico seguro comum do JavaScript.
Prepare um certificado completo
Comece com o inteiro ímpar que você deseja certificar e fatore completamente n menos um. Informe n e cada fator primo como uma string decimal canônica, pois as strings preservam valores exatos até o limite de 64 bits. Cada fator deve aparecer uma vez, com expoente positivo. Por exemplo, para n = 29, n menos um = 28 = 2 ao quadrado vezes 7; portanto, a lista contém 2 com expoente 2 e 7 com expoente 1. Você também deve fornecer uma base a que satisfaça 1 < a < n. Essa base é a testemunha de Lucas proposta. O verificador exige deliberadamente a testemunha em vez de procurá-la: verificar um certificado é rápido, limitado e repetível, enquanto uma busca pode ter duração dependente da entrada. Caso ainda não tenha uma testemunha, experimente bases pequenas em uma ferramenta separada de raízes primitivas e depois envie o certificado resultante. Espaços, sinais, zeros à esquerda, notação de ponto flutuante, primos duplicados, fatores compostos e fatores ausentes são rejeitados, e não normalizados silenciosamente, o que torna o certificado adequado para trilhas de auditoria e pipelines automatizados.
Entenda as duas condições de Lucas
O primeiro cálculo verifica se a elevado a n menos um é congruente a 1 módulo n. Essa é a conhecida condição de Fermat, mas ela não prova primalidade sozinha, pois pseudoprimos podem satisfazê-la. A segunda etapa, decisiva, usa cada primo distinto q que divide n menos um. Para cada q, o verificador calcula a elevado a (n menos um) dividido por q módulo n, subtrai um e confirma que o resultado tem máximo divisor comum 1 com n. A aprovação em todas essas verificações prova que a ordem multiplicativa de a módulo n é exatamente n menos um. Um elemento módulo n não pode ter essa ordem a menos que n seja primo; esse é o núcleo do teorema de Lucas. Os registros retornados exibem o resíduo modular e o máximo divisor comum para cada q distinto, enquanto o expoente continua visível como parte da fatoração validada. A exponenciação modular utiliza quadrados sucessivos com aritmética BigInt exata; assim, o cálculo nunca depende de arredondamento de ponto flutuante, bases aleatórias, serviço de rede ou confiança probabilística.
Interprete falhas e resultados bem-sucedidos
Uma resposta bem-sucedida é o resultado de um certificado de primalidade, não apenas um rótulo de primo provável. Ela repete n, identifica a testemunha aceita, informa o resíduo de Fermat e lista uma verificação bem-sucedida do máximo divisor comum para cada fator distinto de n menos um. Guarde a entrada original junto com a resposta quando outro sistema precisar reproduzir a prova. As falhas são intencionalmente específicas. Se as potências dos fatores não multiplicarem exatamente n menos um, a fatoração estará incompleta ou incorreta. Se um fator informado for composto ou o mesmo primo aparecer duas vezes, a fatoração estará malformada, mesmo que o produto bruto coincida. A falha de qualquer condição modular indica que a base fornecida não é uma testemunha de Lucas; isoladamente, isso não distingue um n composto de um primo acompanhado de uma base inadequada. Experimente outra testemunha matematicamente justificada se ainda houver expectativa de primalidade. As entradas são limitadas a inteiros ímpares de 3 até 2^64 menos 1, permitindo validar deterministicamente os fatores primos informados antes de avaliar o certificado. O preço da API é US$ 0,002 por solicitação.
Casos de uso
Verifique um primo gerado
Confira um candidato e sua fatoração obtida na construção antes de usar o primo em outro cálculo exato.
Reproduza um certificado
Valide uma testemunha de Lucas de um artigo, exercício acadêmico ou cálculo arquivado com resíduos intermediários explícitos.
Controle dados de teoria dos números
Rejeite fatorações incompletas e testemunhas inválidas antes de aceitar primos alegados em um conjunto confiável.
Perguntas frequentes
Um resultado bem-sucedido prova a primalidade?
Sim. Quando a fatoração completa é válida e todas as condições de Lucas são satisfeitas, o resultado é uma prova determinística de primalidade para o n fornecido.
Por que devo fornecer uma base?
A base é a testemunha contida no certificado. Exigi-la mantém a verificação limitada e reproduzível, em vez de realizar uma busca aberta por uma raiz primitiva.
O que acontece se uma base falhar?
Essa base não é uma testemunha válida. O candidato pode ser composto ou primo com outra testemunha adequada; a falha isolada não decide qual é o caso.
Por que os inteiros são inseridos como strings?
Strings decimais evitam perda de precisão para inteiros maiores que o intervalo numérico seguro do JavaScript. As saídas usam strings pelo mesmo motivo.
Como a fatoração é verificada?
Cada fator informado passa por um teste determinístico de primalidade, duplicatas são rejeitadas e o produto de todas as potências primas deve ser exatamente n menos um.
Qual é o preço?
Cada solicitação de API custa US$ 0,002. A implementação no navegador usa o mesmo cálculo puro.
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/lucas-primality-test \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"n":"29","base":"2","factors":[{"prime":"2","exponent":2},{"prime":"7","exponent":1}]}'const res = await fetch("https://api.kit.forhosting.com/numth/lucas-primality-test", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"n": "29",
"base": "2",
"factors": [
{
"prime": "2",
"exponent": 2
},
{
"prime": "7",
"exponent": 1
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/numth/lucas-primality-test",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"n": "29",
"base": "2",
"factors": [
{
"prime": "2",
"exponent": 2
},
{
"prime": "7",
"exponent": 1
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/numth/lucas-primality-test", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"n":"29","base":"2","factors":[{"prime":"2","exponent":2},{"prime":"7","exponent":1}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"n":"29","base":"2","factors":[{"prime":"2","exponent":2},{"prime":"7","exponent":1}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/numth/lucas-primality-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
{
"n": "29",
"base": "2",
"factors": [
{
"prime": "2",
"exponent": 2
},
{
"prime": "7",
"exponent": 1
}
]
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "numth.lucas_primality_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_bits | 64 |
max_factors | 64 |
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. |