Calculateur pas de bébé-pas de géant de logarithmes discrets
2 puissance 9 laisse un reste de 5 dans la division par 13 : le logarithme discret de 5 en base 2 modulo 13 vaut donc 9. Saisissez une base, une cible et un module, premier ou composé, pour trouver l'exposant. Gratuit dans votre navigateur.
- Gratuit
- Fonctionne dans votre navigateur
- Sans inscription
- Vos données restent sur votre appareil
Lancer gratuitement
Exemple résolu
- G
- 2
- H
- 5
- N
- 13
- X
- 9
- Équation
- 2^9 ≡ 5 (mod 13)
Ce calculateur pas de bébé-pas de géant trouve un exposant non négatif x tel que g puissance x soit congru à h modulo n. Contrairement aux solveurs limités aux corps premiers, il traite aussi les modules composés et les bases non premières avec le module grâce à une réduction préalable. Le résultat fournit les résidus normalisés et une équation de contrôle lisible. Si la cible n’est pas atteignable depuis le générateur indiqué, la requête renvoie une erreur explicite plutôt qu’un résultat vide ambigu.
Décrivez précisément l’équation modulaire
Fournissez trois entiers : g désigne le générateur ou la base, h la cible et n le module. Le calculateur cherche un x non négatif vérifiant g^x congru à h modulo n. Les bases et cibles négatives sont acceptées puis normalisées dans l’intervalle standard allant de zéro à n moins un.
La réponse reprend ces valeurs normalisées afin que vous puissiez contrôler l’instance exacte, même si les données initiales sortaient de cet intervalle. Le module doit valoir au moins deux ; il peut être premier ou composé dans la limite publiée. L’exposant zéro est examiné en premier, selon la convention habituelle où g^0 vaut un modulo n.
Une cible congrue à un donne donc immédiatement x égal à zéro. Une réponse positive contient x, les opérandes normalisés, le nom de la méthode et une équation de vérification lisible. Elle convient aussi bien à un contrôle manuel qu’à une assertion automatisée sans reconstruire le texte dans chaque application cliente.
Comprenez les petits pas et les pas géants
Une recherche directe essaie les exposants successifs et peut demander un nombre de multiplications modulaires proportionnel au module. La méthode pas de bébé-pas de géant échange de la mémoire contre de la vitesse. Elle choisit une largeur proche de la racine carrée de l’espace de recherche, mémorise les petites puissances successives de la base, puis parcourt la cible par bonds de cette largeur.
Une égalité de résidus associe les deux indices et permet de retrouver l’exposant. La table et le nombre de bonds sont ainsi de l’ordre de la racine carrée de n. Cette réalisation est déterministe : aucun candidat n’est tiré au hasard, aucune graine, aucun service et aucune horloge n’interviennent.
Pour les entrées non premières entre elles, la variante étendue commence par retirer les diviseurs communs tout en conservant un décalage d’exposant et un multiplicateur. Si un diviseur rend la cible inaccessible, l’équation est rejetée immédiatement. Dès que la base réduite devient inversible, la recherche par table démarre et le décalage final est ajouté.
Le candidat obtenu est enfin vérifié séparément par exponentiation modulaire.
Limites et cas sans solution
Un logarithme discret n’existe pas toujours. Les puissances de g peuvent ne parcourir qu’une partie des résidus modulo n et laisser h hors de la suite engendrée. Ce choix est volontaire et facilite les chaînes où cette absence doit interrompre l’étape suivante : vous pouvez traiter le code normalisé sans rechercher de champ nul.
Les entiers incorrects, les champs manquants et un module hors limites produisent la même catégorie avec un message plus précis. Le coût de calcul augmente comme la racine carrée du module réduit, car l’algorithme crée une table en mémoire ; la borne empêche les allocations excessives et limite la durée. Employez des paramètres modestes pour l’enseignement, les vecteurs de test, les énigmes et le diagnostic.
Cet outil ne récupère pas les secrets de groupes cryptographiques réels, volontairement beaucoup plus grands.
Cas d’usage
Vérifier des exercices d’arithmétique modulaire
Contrôlez une équation pédagogique et obtenez l’exposant avec une congruence lisible à substituer dans le problème.
Créer des vecteurs de test déterministes
Produisez des réponses connues pour du code d’exponentiation modulaire, y compris avec des modules composés et des facteurs communs.
Questions fréquentes
Le module doit-il être premier ?
Non. La réduction étendue accepte les modules premiers ou composés, notamment de nombreux cas où g et n partagent un facteur.
Quel exposant est renvoyé ?
Le solveur cherche des exposants non négatifs, traite explicitement zéro et renvoie une solution vérifiée par BSGS.
Pourquoi le module est-il limité ?
La méthode consomme du temps et de la mémoire en racine carrée. La limite rend la table et l’exécution prévisibles.
Que se passe-t-il si aucun exposant n'existe ?
Les puissances de la base peuvent n'atteindre qu'une partie des restes modulo n, et la cible peut rester hors de portée. Vous recevez alors un message clair indiquant qu'il n'existe aucun exposant, plutôt qu'une réponse vide.
Pourquoi est-ce plus rapide que d'essayer les exposants un par un ?
Une recherche directe peut demander autant d'étapes que la taille du module. Cette méthode garde une table de petites puissances puis avance par grands sauts, si bien que chaque partie coûte environ la racine carrée de n.
Outils associés
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/baby-step-giant-step \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"g":2,"h":5,"n":13}'const res = await fetch("https://api.kit.forhosting.com/numth/baby-step-giant-step", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"g": 2,
"h": 5,
"n": 13
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/numth/baby-step-giant-step",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"g": 2,
"h": 5,
"n": 13
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/numth/baby-step-giant-step", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"g":2,"h":5,"n":13}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"g":2,"h":5,"n":13}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/numth/baby-step-giant-step", 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
{
"g": 2,
"h": 5,
"n": 13
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "numth.baby_step_giant_step",
"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.
Limites
max_n | 1000000000000 |
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. |
Notes techniques
Décrivez précisément l’équation modulaire
Les entrées peuvent être des entiers JSON ou des chaînes de chiffres, ce qui convient lorsqu’un langage client représente difficilement une valeur.
Gérez les limites, les échecs et l’API
Dans ce cas, cette capacité lève une erreur invalid_input dont le message précise qu’aucun exposant n’existe. Le navigateur exécute le même solveur pur que l’API. Chaque élément automatisé coûte $0.002, sans calcul dépendant du réseau ni résultat aléatoire.
Cas d'intégration
Détecter les cibles inaccessibles
Utilisez l’erreur normalisée invalid_input pour arrêter un traitement lorsque la cible n’appartient pas à la suite des puissances de g.
Questions techniques
Que se passe-t-il si le logarithme discret n’existe pas ?
L’appel échoue avec invalid_input et un message indiquant qu’aucun exposant ne correspond aux valeurs fournies.
Combien coûte un appel à l’API ?
Chaque élément coûte $0.002. L’outil du navigateur emploie la même bibliothèque pure pour les calculs interactifs.