Calculadora de Hensel
A calculadora de levantamento de Hensel recebe um polinômio inteiro, uma raiz conhecida módulo um primo p e um expoente-alvo k.
Executar grátis
Ela aplica a forma de raiz simples do lema de Hensel para obter a única raiz compatível módulo p^k. Todos os cálculos usam aritmética inteira exata, e o resultado mostra cada módulo, raiz e dígito de correção intermediário para que você possa conferir ou reproduzir o levantamento. A cadeia completa de congruências permanece visível.
Informe o polinômio e a raiz de forma precisa
Informe o polinômio com coeficientes em ordem crescente de grau. Por exemplo, [-2, 0, 1] significa x ao quadrado menos 2: o primeiro item é o termo constante, o segundo multiplica x e o terceiro multiplica x ao quadrado. Depois, informe um primo p, uma raiz inteira e o expoente-alvo k. A raiz fornecida pode ser qualquer representante inteiro; a calculadora primeiro a reduz ao resíduo padrão entre zero e p menos um. Antes do levantamento, ela verifica se o polinômio avaliado nesse resíduo é zero módulo p. Também confirma que p é realmente primo e que o polinômio tem grau positivo. Essas verificações são importantes porque o lema de Hensel não procura às cegas uma raiz modular inicial. Ele começa com uma raiz já conhecida no primeiro nível primo. Se esse requisito falhar, a calculadora retorna um erro de entrada claro, em vez de exibir um resíduo sem justificativa matemática.
Entenda a etapa de Hensel para raiz simples
Suponha que a raiz atual r funcione módulo p elevado a n. O próximo candidato compatível tem a forma r mais t vezes p elevado a n, em que t é um dígito módulo p. A divisão do valor atual do polinômio por p elevado a n, seguida da multiplicação pelo inverso da derivada, determina esse dígito de correção. A calculadora executa essa operação nível por nível até alcançar p^k. A hipótese essencial é que a derivada formal na raiz inicial não seja zero módulo p. Isso torna a derivada invertível; portanto, cada correção existe e é única. Se a derivada se anular módulo p, esta capacidade para deliberadamente com um erro. Raízes singulares exigem uma análise mais geral: podem não ter levantamento, ter vários ou mudar de comportamento em potências posteriores. Escolher silenciosamente uma ramificação deturparia o teorema de raiz simples e poderia fazer cálculos posteriores parecerem únicos quando não são.
Leia e verifique o levantamento retornado
O campo principal da raiz contém o menor representante não negativo módulo o valor p^k retornado. Ambos aparecem como strings decimais, preservando os valores exatos mesmo quando ultrapassam o intervalo numérico seguro do JavaScript. O expoente confirma o nível solicitado, derivative_mod_p registra o resíduo não nulo da derivada usado no cálculo e verified informa se a substituição direta produz zero módulo o módulo final. O array lifts começa no expoente um e registra cada raiz e módulo sucessivos. A partir do segundo item, correction_digit é o dígito em base p acrescentado naquela etapa. Esse histórico é útil para conferir exercícios, exemplos resolvidos, testes de algoritmos e anotações de pesquisa reproduzíveis. Você pode avaliar o polinômio em qualquer raiz listada e confirmar a divisibilidade pelo módulo correspondente. O resultado é o levantamento único congruente com a raiz inicial fornecida módulo p; outra raiz do mesmo polinômio geralmente conduz a uma ramificação p-ádica compatível diferente.
Casos de uso
Conferir um exercício de teoria dos números
Compare cada dígito de correção com o cálculo manual e verifique o resíduo final módulo a potência prima solicitada.
Criar vetores modulares exatos
Gere raízes determinísticas módulo potências primas crescentes para testar código de álgebra simbólica ou aritmética modular.
Explorar uma ramificação p-ádica
Acompanhe uma raiz simples por potências sucessivas de p e examine a correção em base p escolhida em cada nível.
Perguntas frequentes
Qual ordem de coeficientes a calculadora usa?
Ordem crescente de grau. O array [a0, a1, a2] representa a0 + a1*x + a2*x^2.
Por que p precisa ser primo?
Esta capacidade implementa o lema de Hensel padrão para raízes simples sobre potências de um primo. Um módulo inicial composto exige outra formulação.
Por que uma derivada nula causa erro?
A fórmula de raiz simples exige que a derivada tenha inverso módulo p. Quando ela se anula, o levantamento pode não existir ou não ser único; por isso, a calculadora não faz suposições.
Por que a raiz e o módulo são retornados como strings?
Potências primas podem ultrapassar o intervalo de inteiros seguros. Strings decimais preservam todos os dígitos exatamente em JSON e no navegador.
A raiz inicial precisa estar entre zero e p menos um?
Não. Qualquer representante inteiro seguro é aceito e reduzido módulo p antes da validação e do levantamento.
Quanto custa?
O cálculo no navegador é gratuito. Uma solicitação API custa US$ 0,002.
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/hensel-lift \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"coefficients":[-2,0,1],"root":3,"p":7,"k":4}'const res = await fetch("https://api.kit.forhosting.com/numth/hensel-lift", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"coefficients": [
-2,
0,
1
],
"root": 3,
"p": 7,
"k": 4
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/numth/hensel-lift",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"coefficients": [
-2,
0,
1
],
"root": 3,
"p": 7,
"k": 4
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/numth/hensel-lift", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"coefficients":[-2,0,1],"root":3,"p":7,"k":4}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"coefficients":[-2,0,1],"root":3,"p":7,"k":4}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/numth/hensel-lift", 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
{
"coefficients": [
-2,
0,
1
],
"root": 3,
"p": 7,
"k": 4
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "numth.hensel_lift",
"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.
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. |