Calculateur de Hensel
Le calculateur de relèvement de Hensel reçoit un polynôme entier, une racine connue modulo un nombre premier p et un exposant cible k.
Lancer gratuitement
Il applique la forme à racine simple du lemme de Hensel afin d’obtenir l’unique racine compatible modulo p^k. Tous les calculs utilisent une arithmétique entière exacte. Le résultat affiche chaque module, racine et chiffre de correction intermédiaire pour que vous puissiez contrôler ou reproduire le relèvement. La chaîne complète des congruences reste visible.
Saisissez précisément le polynôme et la racine
Fournissez les coefficients du polynôme par degré croissant. Ainsi, [-2, 0, 1] désigne x au carré moins 2 : la première valeur est le terme constant, la deuxième multiplie x et la troisième multiplie x au carré. Indiquez ensuite un nombre premier p, une racine entière et l’exposant cible k. La racine peut être n’importe quel représentant entier ; le calculateur la réduit d’abord au résidu standard compris entre zéro et p moins un. Avant le relèvement, il vérifie que l’évaluation du polynôme en ce résidu vaut zéro modulo p. Il contrôle également que p est bien premier et que le polynôme est de degré positif. Ces vérifications sont nécessaires, car le lemme de Hensel ne recherche pas au hasard une racine modulaire initiale. Il part d’une racine déjà connue au premier niveau premier. Si cette condition échoue, un message d’entrée explicite remplace tout résidu dépourvu de justification mathématique.
Comprenez l’étape de Hensel pour une racine simple
Supposons que la racine courante r convienne modulo p élevé à n. Le candidat compatible suivant s’écrit r plus t fois p élevé à n, où t est un chiffre modulo p. Le quotient de la valeur courante du polynôme par p élevé à n, multiplié par l’inverse de la dérivée, détermine ce chiffre de correction. Le calculateur répète l’opération niveau après niveau jusqu’à p^k. L’hypothèse essentielle exige que la dérivée formelle à la racine initiale ne soit pas nulle modulo p. Elle devient alors inversible, et chaque correction existe de manière unique. Si la dérivée s’annule modulo p, cette capacité renvoie volontairement une erreur. Les racines singulières demandent une analyse plus générale : aucun relèvement, plusieurs relèvements ou un comportement variable aux puissances suivantes sont possibles. Choisir discrètement une branche dénaturerait le théorème et donnerait une fausse impression d’unicité aux calculs ultérieurs.
Lisez et contrôlez le relèvement obtenu
Le champ principal de la racine contient le plus petit représentant non négatif modulo la valeur p^k renvoyée. Les deux valeurs sont des chaînes décimales afin de rester exactes au-delà de la plage numérique sûre de JavaScript. L’exposant confirme le niveau demandé, derivative_mod_p mémorise le résidu non nul de la dérivée utilisé et verified indique si la substitution directe donne zéro modulo le module final. Le tableau lifts commence à l’exposant un et répertorie chaque racine et chaque module successifs. Dès la deuxième entrée, correction_digit est le chiffre en base p ajouté à cette étape. Cette trace facilite la vérification d’exercices, d’exemples détaillés, de tests algorithmiques et de notes de recherche reproductibles. Vous pouvez réévaluer le polynôme à toute racine affichée et vérifier sa divisibilité par le module associé. Le résultat est l’unique relèvement congruent à la racine initiale fournie modulo p ; une autre racine mène généralement à une branche p-adique différente.
Cas d’usage
Vérifier un exercice de théorie des nombres
Comparez chaque chiffre de correction à votre calcul manuel et contrôlez le résidu final modulo la puissance première demandée.
Créer des vecteurs modulaires exacts
Produisez des racines déterministes modulo des puissances premières croissantes pour tester un code d’algèbre symbolique ou d’arithmétique modulaire.
Explorer une branche p-adique
Suivez une racine simple au fil des puissances successives de p et examinez la correction en base p de chaque niveau.
Questions fréquentes
Dans quel ordre faut-il fournir les coefficients ?
Par degré croissant. Le tableau [a0, a1, a2] représente a0 + a1*x + a2*x^2.
Pourquoi p doit-il être premier ?
Cette capacité applique le lemme de Hensel standard pour une racine simple sur les puissances d’un nombre premier. Un module initial composé exige une autre méthode.
Pourquoi une dérivée nulle produit-elle une erreur ?
La formule à racine simple exige un inverse de la dérivée modulo p. Si elle s’annule, le relèvement peut être absent ou multiple ; le calculateur ne fait donc aucune supposition.
Pourquoi la racine et le module sont-ils des chaînes ?
Les puissances premières peuvent dépasser la plage des entiers sûrs. Les chaînes décimales conservent exactement chaque chiffre dans JSON et le navigateur.
La racine initiale doit-elle être comprise entre zéro et p moins un ?
Non. Tout représentant entier sûr est accepté puis réduit modulo p avant la validation et le relèvement.
Quel est le tarif ?
Le calcul dans le navigateur est gratuit. Une requête API coûte $0.002.
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre stack
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)Exemple de requête
{
"coefficients": [
-2,
0,
1
],
"root": 3,
"p": 7,
"k": 4
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "numth.hensel_lift",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |