Vérifier une somme avec deux pièces copremières
Le vérificateur de représentation à deux pièces détermine si une cible non négative peut être formée avec un nombre quelconque, mais non négatif, de deux valeurs de pièces données.
Lancer gratuitement
Les valeurs doivent être copremières, ce qui permet une résolution exacte par arithmétique modulaire. Si la cible est représentable, le résultat fournit une paire précise de nombres de pièces ; sinon, il indique clairement qu'aucune paire ne convient. Cet outil sert aux expériences numériques, aux exercices de mathématiques discrètes, à la conception de valeurs faciales et à la validation de combinaisons exactes sans recherche exhaustive.
Définissez précisément le problème des deux pièces
Saisissez deux valeurs de pièces entières et positives dans coin_a et coin_b, puis une cible entière non négative. Le vérificateur cherche des entiers non négatifs count_a et count_b tels que le nombre de premières pièces multiplié par coin_a, additionné au nombre de secondes pièces multiplié par coin_b, soit strictement égal à la cible. Un résultat représentable ne correspond donc ni à une valeur approchée ni à une combinaison simplement inférieure à un budget : l'égalité doit être exacte et aucun nombre ne peut être négatif. Zéro constitue une cible valide, car aucune pièce de chaque type suffit à le produire. Une valeur faciale égale à un est également admise et rend toute cible non négative représentable. Les trois entrées doivent être des entiers sûrs ; les décimales, chaînes numériques, infinis et entiers dépassant la plage exacte de JavaScript sont refusés afin d'éviter tout arrondi silencieux. Enfin, les deux valeurs doivent être copremières : leur plus grand commun diviseur doit valoir un.
Comprenez le calcul modulaire
Puisque les valeurs faciales sont copremières, la première possède un inverse multiplicatif modulo la seconde. Le vérificateur calcule cet inverse avec l'algorithme d'Euclide étendu, puis s'en sert pour trouver l'unique candidat count_a compris entre zéro et coin_b moins un qui respecte la congruence requise. Une fois la contribution de ces premières pièces soustraite de la cible, il reste une différence. Si elle est non négative, elle est divisible par coin_b et donne un count_b valide ; la réponse fournit alors les deux nombres comme preuve concrète. Si la différence est négative, aucune représentation non négative n'existe. Cette conclusion est complète et non heuristique : toute autre solution entière modifie count_a d'un multiple entier de coin_b et count_b, dans le sens opposé, d'un multiple entier de coin_a. Comme le calcul part du plus petit candidat non négatif pour count_a, une différence négative ne peut être corrigée sans rendre count_a négatif. La méthode s'exécute en temps logarithmique sans essayer successivement de nombreux nombres de pièces.
Interprétez les résultats et les erreurs de saisie
Une réponse où representable vaut vrai contient count_a et count_b. La multiplication de chaque nombre par la valeur faciale correspondante reconstitue la cible. La paire renvoyée est une preuve valide ; une cible assez grande peut posséder plusieurs représentations, mais le vérificateur ne prétend ni toutes les énumérer ni les optimiser. Une réponse fausse omet les nombres, puisqu'aucune paire ne s'applique. Il faut distinguer une erreur de valeurs non copremières d'un résultat faux. Faux signifie que l'entrée respecte le contrat, mais que cette cible précise ne peut pas être formée. Une erreur signifie que la paire sort du domaine défini par cette capacité ; aucune décision de représentabilité n'est alors fournie. Par exemple, les pièces 6 et 9 ont le facteur commun 3 et sont refusées, même si la cible est divisible par 3. Cette distinction évite de confondre une violation du domaine et une impossibilité mathématique. Le calcul est déterministe, n'utilise aucun service réseau et produit le même résultat avec les mêmes entiers exacts dans le navigateur et via l'API.
Cas d’usage
Contrôler un montant exact
Déterminez si deux valeurs disponibles permettent de former le total requis et obtenez une paire de nombres lorsqu'elles le permettent.
Vérifier un exercice de théorie des nombres
Testez une cible avec deux valeurs copremières et comparez la preuve renvoyée à votre calcul manuel.
Valider des combinaisons de tailles fixes
Modélisez deux tailles de lots copremières comme des pièces et vérifiez si la quantité exacte peut être assemblée sans lot partiel.
Questions fréquentes
Que signifie représentable ?
La cible est égale à coin_a multiplié par count_a plus coin_b multiplié par count_b, pour des nombres entiers non négatifs.
Pourquoi les pièces doivent-elles être copremières ?
Cette capacité suit le contrat à deux pièces copremières, qui garantit l'inverse modulaire nécessaire à son algorithme direct. Une paire dont le diviseur commun dépasse un est refusée.
Un résultat vrai fournit-il une combinaison ?
Oui. La réponse contient count_a et count_b, une combinaison exacte et non négative qui reconstitue la cible.
Toutes les combinaisons possibles sont-elles renvoyées ?
Non. L'outil décide si une représentation existe et fournit une preuve le cas échéant ; il n'énumère ni n'optimise toutes les paires.
La cible peut-elle être égale à zéro ?
Oui. Zéro est représentable en utilisant zéro pièce de chaque valeur faciale.
Combien coûte une requête API ?
Chaque requête API coûte $0.002. La version pour navigateur peut exécuter localement le même calcul déterministe.
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/coin-representable-two \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"coin_a":4,"coin_b":7,"target":23}'const res = await fetch("https://api.kit.forhosting.com/numth/coin-representable-two", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"coin_a": 4,
"coin_b": 7,
"target": 23
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/numth/coin-representable-two",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"coin_a": 4,
"coin_b": 7,
"target": 23
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/numth/coin-representable-two", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"coin_a":4,"coin_b":7,"target":23}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"coin_a":4,"coin_b":7,"target":23}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/numth/coin-representable-two", 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
{
"coin_a": 4,
"coin_b": 7,
"target": 23
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "numth.coin_representable_two",
"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. |