Verificador de primos de Mersenne com Lucas-Lehmer
Este verificador recebe um expoente primo p e determina se 2^p - 1 é primo. Ele usa Lucas-Lehmer, o teste determinístico próprio para números de Mersenne, e retorna o número exato, a quantidade de iterações e o resíduo final.
Executar grátis
Primeiro, o expoente é validado, pois um expoente composto não pode produzir um primo de Mersenne. Essa regra separa uma solicitação inválida de um teste válido que conclui que o número é composto.
Escolha e valide o expoente
Informe um expoente inteiro p entre 2 e 10,000. O verificador aceita o campo p e o alias exponent, inclusive como texto inteiro em clientes orientados a texto. Antes de construir o número, ele confirma por divisão experimental determinística que p é primo. Essa é uma condição matemática, e não apenas uma otimização: se p for composto, 2^p - 1 terá uma fatoração algébrica. Portanto, esse caso gera erro de entrada, não um resultado falso. Assim, falso significa que um expoente primo foi testado corretamente, enquanto um erro informa que a solicitação não pertence ao domínio de Lucas-Lehmer. Decimais, campos ausentes, listas, textos não numéricos e valores fora do limite também são rejeitados.
Entenda o cálculo de Lucas-Lehmer
Depois de validar p, o sistema forma M = 2^p - 1 com aritmética BigInt exata. Para um primo ímpar, começa com s = 4 e substitui repetidamente s por seu quadrado menos 2, reduzido módulo M. São feitas exatamente p - 2 atualizações. O teorema de Lucas-Lehmer afirma que M é primo se, e somente se, o resíduo final for zero. Não há arredondamento, testemunhas probabilísticas, serviços de rede ou semente aleatória. O caso p = 2 corresponde a M = 3, não exige passos e retorna resíduo zero. A resposta mostra o Mersenne decimal exato, a decisão, o método, as iterações e o resíduo final para que você possa reproduzir e auditar o cálculo.
Interprete e aplique o resultado
Leia is_prime como a decisão sobre o número de Mersenne, e não sobre o expoente, que já foi validado. Verdadeiro indica resíduo final zero; falso indica que p era primo, mas 2^p - 1 era composto. Isso é comum, pois um expoente primo é necessário, porém não suficiente. mersenne e final_residue são textos decimais para evitar perda de precisão em JSON. A ferramenta atende a experiências didáticas, testes de regressão, demonstrações e verificações matemáticas limitadas. Ela não é um serviço de busca ilimitada: avalia um expoente por solicitação e impõe um teto. O navegador executa a mesma lógica determinística da API, e cada chamada automatizada custa US$ 0,002. Como o resultado não muda, use cache em sistemas de alto volume.
Casos de uso
Verificar um expoente candidato
Confirme se o número de Mersenne de um expoente primo satisfaz exatamente o critério de Lucas-Lehmer.
Ensinar recorrência modular
Demonstre como quadraturas modulares repetidas chegam a um resíduo zero ou diferente de zero.
Criar dados de teste determinísticos
Gere valores, contagens de iteração e resíduos estáveis para validar outra implementação.
Perguntas frequentes
O que acontece se p for composto?
A solicitação retorna erro de entrada inválida porque p precisa ser primo.
Um expoente primo garante um primo de Mersenne?
Não. Ele é necessário, mas não suficiente; o resíduo de Lucas-Lehmer fornece a decisão final.
Por que o número e o resíduo são textos?
Eles podem exceder o intervalo inteiro exato de JSON; textos decimais preservam todos os dígitos.
O teste é probabilístico?
Não. Lucas-Lehmer é determinístico para números de Mersenne com expoentes primos.
Quanto custa uma verificação pela API?
Cada solicitação custa US$ 0,002. A versã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/mersenne-prime-check \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"p":31}'const res = await fetch("https://api.kit.forhosting.com/numth/mersenne-prime-check", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"p": 31
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/numth/mersenne-prime-check",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"p": 31
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/numth/mersenne-prime-check", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"p":31}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"p":31}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/numth/mersenne-prime-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
{
"p": 31
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "numth.mersenne_prime_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
min_p | 2 |
max_p | 10000 |
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. |