Vérificateur de pseudopremiers de Fermat pour toute base
Le vérificateur de pseudopremiers de Fermat reçoit un entier composé n et une base a, calcule exactement le reste de a élevé à n moins un modulo n, puis indique si ce reste vaut un.
Lancer gratuitement
Un composé qui réussit est un pseudopremier de Fermat pour la base choisie : il se comporte comme un nombre premier dans ce test précis sans l’être. Le plus grand commun diviseur est également fourni pour faciliter l’analyse et l’explication du résultat.
Ce que signifie réellement un résultat positif
Le petit théorème de Fermat affirme que si n est premier et que a n’est pas divisible par n, alors a élevé à la puissance n moins un laisse un reste égal à un modulo n. La réciproque n’est pas garantie. Certains entiers composés produisent eux aussi un reste égal à un pour certaines bases ; on les appelle des pseudopremiers de Fermat pour ces bases. Ce vérificateur exige délibérément que n soit composé, contrôle d’abord cette condition, puis évalue exactement la congruence. Lorsque passes_fermat_test et is_fermat_pseudoprime valent vrai, le composé fourni a trompé le test de Fermat pour cette base précise. Cela ne signifie pas que n est premier, probablement premier ou pseudopremier pour toutes les bases. La base fait partie intégrante de l’affirmation et doit toujours accompagner le résultat. Le reste renvoyé constitue la preuve arithmétique directe : un signifie que le test réussit, toute autre valeur qu’il échoue. Le plus grand commun diviseur aide en outre à reconnaître les bases premières avec n et les relations de facteur déjà visibles.
Comment le calcul reste exact
Les deux entrées sont des chaînes décimales afin que les entiers dépassant la plage numérique sûre de JavaScript ne soient pas arrondis avant le calcul. La plage admise s’arrête au plus grand entier non signé sur 64 bits, ce qui fixe une limite claire et vérifiable au contrôle de primalité. Avant le test de Fermat, le vérificateur applique une procédure déterministe de Miller–Rabin avec un ensemble de témoins suffisant sur toute cette plage. Un nombre premier détecté provoque une erreur de saisie : les nombres premiers satisfont le théorème, mais ne peuvent pas être des pseudopremiers par définition. Pour un composé valide, l’exponentiation modulaire emploie les carrés successifs au lieu de construire l’immense valeur a^(n-1). Chaque multiplication est réduite modulo n, ce qui maintient les valeurs intermédiaires bornées et exactes avec BigInt. L’algorithme d’Euclide calcule séparément gcd(a,n). La base doit respecter 2 <= a <= n - 2. Aucun témoin aléatoire, horodatage, appel réseau ou calcul flottant n’influence la réponse ; les mêmes entrées produisent donc toujours la même sortie.
Utilisation pour l’apprentissage et la vérification
Un exemple classique prend n = 341 et la base a = 2. Bien que 341 soit composé, 2^340 est congru à un modulo 341 ; il réussit donc le test et constitue un pseudopremier de Fermat en base deux. Avec une autre base, ce même composé peut échouer, raison pour laquelle un seul test de Fermat ne fournit pas un certificat général de primalité. Dans un cours, la sortie structurée relie directement la définition au reste calculé. Dans une suite de tests, elle permet de conserver des vecteurs connus de pseudopremiers et de non-pseudopremiers sans dépendre d’une bibliothèque mathématique ni de conversions propres à une machine. Pour explorer le phénomène, comparez plusieurs bases autorisées en gardant n fixe et observez l’importance du témoin choisi. Interprétez un résultat vrai comme une démonstration des limites du test de Fermat, jamais comme une autorisation d’accepter le nombre en tant que premier dans un code cryptographique ou sensible. L’API facture $0.002 par paire vérifiée, tandis que le navigateur exécute localement le même calcul déterministe.
Cas d’usage
Présenter un pseudopremier classique
Vérifiez qu’un composé connu comme 341 satisfait la congruence de Fermat en base 2 et examinez le reste exact.
Préparer des exercices de théorie des nombres
Contrôlez les corrigés qui demandent si un composé donné est pseudopremier pour une base déterminée.
Tester des implémentations arithmétiques
Employez des résultats structurés et déterministes comme vecteurs de référence pour l’exponentiation modulaire ou du code pédagogique de primalité.
Questions fréquentes
Quand n est-il pseudopremier de Fermat en base a ?
Il doit être composé et vérifier que a^(n-1) est congru à 1 modulo n pour la base fournie.
Pourquoi un n premier est-il refusé ?
Les nombres premiers satisfont normalement la congruence de Fermat, mais le terme pseudopremier ne concerne que les composés ; accepter un premier répondrait à une autre question.
Un résultat vrai prouve-t-il que n est premier ?
Non. Le vérificateur a déjà établi que n est composé. Un résultat vrai montre précisément comment ce composé trompe le test pour une base.
Pourquoi saisir n et a sous forme de chaînes ?
Les chaînes décimales préservent chaque chiffre dans l’API et le navigateur, même au-delà de la plage sûre des nombres JavaScript ordinaires.
Quel est le tarif ?
L’API coûte $0.002 par paire vérifiée. L’outil du navigateur effectue localement le même calcul.
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/fermat-pseudoprime-check \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"n":"341","a":"2"}'const res = await fetch("https://api.kit.forhosting.com/numth/fermat-pseudoprime-check", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"n": "341",
"a": "2"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/numth/fermat-pseudoprime-check",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"n": "341",
"a": "2"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/numth/fermat-pseudoprime-check", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"n":"341","a":"2"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"n":"341","a":"2"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/numth/fermat-pseudoprime-check", 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": "341",
"a": "2"
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "numth.fermat_pseudoprime_check",
"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_digits | 20 |
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. |