Test Miller–Rabin déterministe
97 est premier : il passe les sept bases fixes, 2, 3, 5, 7, 11, 13 et 23, dont on a prouvé qu'elles tranchent tout entier jusqu'à 9007199254740991. Pour un composé, vous voyez aussi la première base qui l'a démasqué. Gratuit dans votre navigateur.
- Gratuit
- Fonctionne dans votre navigateur
- Sans inscription
- Vos données restent sur votre appareil
Lancer gratuitement
Exemple résolu
- N
- 97
- Borne
- 9 007 199 254 740 991
- Nombre de témoins
- 7
Le test de Miller–Rabin déterministe décide si un entier n est premier en appliquant le test de témoin de nombre premier probable fort à une liste courte et fixe de bases connues pour trancher tout entier sous une borne de garantie publiée. Contrairement à une exécution probabiliste de Miller–Rabin qui tire des témoins au hasard et n’estime que l’erreur, cette capacité utilise toujours les mêmes bases, renvoie toujours le même verdict pour le même n, et refuse toute entrée au-dessus de la borne où ces bases ne sont plus prouvées suffisantes. Vous envoyez un unique entier au moins égal à deux et au plus égal à la borne, et vous recevez un indicateur de primalité, la liste des témoins, la borne elle-même et—si le nombre est composé—le premier témoin qui l’a prouvé.
Fonctionnement du test de premier probable fort à bases fixes
Miller–Rabin réécrit un candidat impair n comme n moins un égal à d fois deux à la puissance s avec d impair, puis pour chaque témoin a calcule a à la puissance d modulo n. Si cette puissance vaut un ou n moins un, le témoin réussit. Sinon l’algorithme élève la valeur au carré jusqu’à s moins une fois et n’accepte le témoin que si un carré intermédiaire vaut n moins un ; tout autre chemin prouve que n est composé pour cette base.
Un nombre qui réussit tous les témoins est appelé premier probable fort pour ces bases. Pour des ensembles fixes soigneusement choisis, des résultats de théorie des nombres montrent qu’aucun composé sous un seuil connu ne trompe toutes les bases de l’ensemble—ainsi le résultat de premier probable devient un vrai premier à l’intérieur de la borne. Cette capacité utilise les sept bases deux, trois, cinq, sept, onze, treize et vingt-trois, suffisantes pour tout entier de soixante-quatre bits et donc pour tout entier sûr JavaScript jusqu’à neuf quadrillions.
Les tout petits premiers deux et trois sont tranchés comme premiers. Lorsqu’un témoin divise n et est plus petit que n, ce témoin est signalé comme base défaillante car n est un multiple évident.
Quand un test de primalité à bases fixes aide
Les cours de cryptographie et les formateurs CTF utilisent un test de Miller–Rabin déterministe pour montrer aux étudiants la différence entre des contrôles probabilistes à témoins aléatoires et des certificats à bases fixes qui nomment leur borne de garantie dans la réponse. Les auteurs de bibliothèques ancrent des tests unitaires contre des premiers connus, des pseudopremiers forts et des composés pour qu’un refactoring de l’exponentiation modulaire ne bascule pas un verdict en silence.
Les développeurs d’applications valident des valeurs de configuration de forme première, des graines de puzzle ou des paramètres jouet Diffie–Hellman avant un pipeline plus long, en capturant les pairs et les petits composés sans déployer un système d’algèbre computationnelle.
Préférez cet outil lorsque l’intention de recherche est précisément l’algorithme de Miller–Rabin déterministe avec témoins fixes et borne dure—non lorsque vous avez besoin du plus petit diviseur d’un composé, d’une factorisation première complète, de Lucas–Lehmer pour les nombres de Mersenne, ou de tests probabilistes avec une liste de témoins personnalisée que vous fournissez vous-même.
Cas d’usage
Enseigner les certificats Miller–Rabin à bases fixes
Montrez aux étudiants un verdict premier ou composé avec la liste exacte des témoins et la borne de garantie, pour rendre concrète la différence avec les tests probabilistes à témoins aléatoires.
Ancrer des tests unitaires de primalité modulaire
Affirmez des premiers de référence, des composés et des rejets hors borne face à un oracle stable de Miller–Rabin déterministe avant de livrer un changement de bibliothèque cryptographique ou de théorie des nombres.
Valider des paramètres de forme première sous une borne
Rejetez des valeurs de configuration, des graines de puzzle ou des modules cryptographiques jouet qui échouent au Miller–Rabin à bases fixes, et enregistrez le témoin défaillant dans la piste d’audit.
Questions fréquentes
Combien coûte le test de Miller–Rabin déterministe ?
Le même contrôle s’exécute aussi gratuitement dans votre navigateur sur cette page ; l’entrée invalide n’est pas facturée.
Quels nombres sont acceptés ?
Entiers complets de 2 jusqu’à la borne de garantie publiée 9007199254740991.
Quelles bases témoins sont utilisées ?
La liste fixe 2, 3, 5, 7, 11, 13 et 23. Elles sont renvoyées dans le champ witnesses à chaque réponse réussie pour que les clients n’aient jamais à coder le jeu en dur.
S’agit-il d’un Miller–Rabin probabiliste ?
Non. Les bases sont fixes et prouvées suffisantes pour tout entier dans la borne prise en charge, de sorte que le même n produit toujours le même verdict déterministe premier ou composé.
Que se passe-t-il si n dépasse la borne ?
La capacité n’affirmera pas un verdict déterministe hors de l’intervalle où les bases fixes sont certifiées.
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/miller-rabin-deterministic \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"n":97}'const res = await fetch("https://api.kit.forhosting.com/numth/miller-rabin-deterministic", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"n": 97
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/numth/miller-rabin-deterministic",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"n": 97
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/numth/miller-rabin-deterministic", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"n":97}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"n":97}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/numth/miller-rabin-deterministic", 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
{
"n": 97
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "numth.miller_rabin_deterministic",
"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. |
Notes techniques
La même arithmétique modulaire pure alimente le chemin gratuit du navigateur et celui de l’API, de sorte que devoirs, jouets cryptographiques et scripts d’automatisation ne divergent jamais sur un nombre de Carmichael limite ou un pseudopremier fort.
Ce que renvoie Miller–Rabin déterministe et le rôle de la borne
Chaque appel réussi répond à quatre questions liées : n est-il premier sous la suite Miller–Rabin à bases fixes, quelles bases témoins ont été appliquées, quel est le plus grand entier que cette suite garantit de trancher correctement, et—si n est composé—quel témoin a d’abord échoué au test de premier probable fort. Cette coupure stricte distingue le produit d’un vérificateur de primalité général qui pourrait changer de stratégie en silence ou affirmer la primalité sans énoncer sa limite de certificat. Utilisez ce point d’accès lorsque vous avez besoin d’un verdict auditable de Miller–Rabin déterministe avec la liste des témoins et la borne écrites dans le résultat, non d’une conjecture probabiliste ni d’une factorisation complète de chaque diviseur. La réponse est un objet JSON compact avec un booléen prime, l’entier n renvoyé, un tableau ordonné witnesses, la borne numérique, un witness_count, un champ failing_witness (null pour les premiers, une base concrète pour les composés) et une étiquette method égale à miller_rabin_deterministic afin que les clients journalisent le chemin algorithmique. Une entrée manquante, fractionnaire, non numérique ou strictement inférieure à deux est rejetée avec invalid_input avant toute exponentiation modulaire. Les valeurs supérieures à la borne de garantie publiée sont aussi rejetées avec invalid_input et un message qui nomme la borne, car une liste fixe de témoins n’est un certificat mathématique que dans cet intervalle ; au-delà, les mêmes bases peuvent laisser un composé indétecté.
Fonctionnement du test de premier probable fort à bases fixes
Les pairs composés sont rejetés immédiatement avec failing_witness deux sans parcourir la boucle complète.
Où une API Miller–Rabin déterministe trouve sa place
Les ingénieurs de données filtrent des colonnes numériques prétendument premières et stockent le champ failing_witness dans le journal d’audit lorsqu’une ligne échoue. Comme la capacité est de niveau A, vous pouvez coller un nombre sur cette page et exécuter la logique identique gratuitement dans le navigateur ; automatisez le même contrat ensuite à $0.002 par requête en branchant des tâches dans des scripts ou des SDK. Gardez n un entier d’au moins deux dans la borne publiée, traitez invalid_input comme une correction client plutôt qu’un nouvel essai, et journalisez les champs witnesses et bound chaque fois que vous avez besoin d’un certificat reproductible de ce qui a été vérifié.