Ist Modulo assoziativ?
Die Modulo-Assoziativitäts-API beantwortet eine trügerisch einfache Frage: Spielt die Klammerung bei drei ganzen Zahlen eine Rolle?
Im Browser ausführen – kostenlos
Sie berechnet beide Reihenfolgen der Restoperation — links (a % b) % c und rechts a % (b % c) — und sagt Ihnen, ob sie übereinstimmen. Sie senden drei ganze Zahlen und erhalten beide Seiten des Vergleichs sowie ein schlichtes true oder false, berechnet mit Ganzzahlen beliebiger Präzision, sodass das Ergebnis für Werte jeder realistischen Größe exakt ist. Wäre eine Divisorposition null — b, c oder der Zwischenrest b % c —, wird die Anfrage mit einem klaren Fehler abgelehnt statt mit einer unerwarteten Division durch null. Es ist eine kleine Prüfung, aber sie entscheidet darüber, ob ein verketteter Modulo-Ausdruck in Ihrem Code das bedeutet, was Sie vermuten.
Warum die Klammerung bei der Restoperation wichtig ist
Addition und Multiplikation sind assoziativ: (1 + 2) + 3 ist stets gleich 1 + (2 + 3), also denkt niemand über Klammern nach. Die Restoperation bietet keine solche Garantie. Der Ausdruck a % b % c ist auf dem Papier mehrdeutig, und die meisten Programmiersprachen lösen ihn von links nach rechts auf und erzeugen (a % b) % c. Ob das der alternativen Klammerung a % (b % c) entspricht, hängt vollständig von den drei beteiligten Werten ab. Nehmen Sie a = 17, b = 5, c = 3: Die linke Klammerung ergibt (17 % 5) % 3 = 2 % 3 = 2, die rechte dagegen 17 % (5 % 3) = 17 % 2 = 1. Beide Klammerungen unterscheiden sich, Modulo ist also für dieses Tripel nicht assoziativ. Für a = 8, b = 5, c = 3 ergeben hingegen beide Seiten 0, und die Operation ist dort zufällig assoziativ. Diese Fähigkeit existiert, weil dieser Unterschied in einem Code-Review leicht zu übersehen und per Hand über einen ganzen Satz von Kandidatenparametern mühsam zu verifizieren ist: Ein einziger Aufruf klärt es deterministisch und liefert beide Zwischenwerte, sodass Sie genau sehen, wo die Klammerungen auseinanderlaufen, statt einem bloßen Booleschen Wert blind zu vertrauen.
Wie die Prüfung berechnet wird, und die Null-Divisor-Regel
Die Berechnung ist bewusst transparent. Zunächst wird jede Eingabe als Ganzzahl eingelesen — Dezimalzeichenketten und JSON-Zahlen werden beide akzeptiert, und intern wird mit Arithmetik beliebiger Präzision gearbeitet, sodass es keine Genauigkeitsgrenze bei 2⁵³ und keinerlei Rundung in der Pipeline gibt. Anschließend wird die linke Seite als (a % b) % c und die rechte Seite als a % (b % c) ausgewertet, wobei % der trunkierten Konvention folgt, die aus JavaScript, C und Java bekannt ist: Das Ergebnis übernimmt das Vorzeichen des Dividenden. Die beiden Ergebnisse werden auf exakte Gleichheit verglichen, und die Antwort wird zusammen mit beiden Seiten gemeldet. Es gibt eine Situation, in der keine Boolesche Antwort existiert: die Division durch null. In den beiden Ausdrücken treten drei Divisorpositionen auf — b in a % b, c in (a % b) % c und der Zwischenwert b % c als Divisor auf der rechten Seite. Ist b oder c null oder ergibt b % c für die gegebenen Werte zufällig null, wird die Anfrage als ungültige Eingabe abgelehnt, mit einer Meldung, die genau den fehlgeschlagenen Divisor benennt. Dieser Fehler wird niemals berechnet, Sie können Parameterbereiche also gefahrlos programmatisch abtasten. Eingaben bis zu 2048 Dezimalziffern pro Feld werden akzeptiert.
Wo sich diese Prüfung bewährt
Der häufigste Aufrufer ist jemand, der Zahlentheorie lehrt oder lernt: Assoziativitätsfragen tauchen ständig in Lehrbüchern und Aufgabensammlungen auf, und die Möglichkeit, eine Behauptung über Hunderte von Tripeln in Sekunden zu verifizieren, verwandelt eine Pflichtübung in ein Experiment. Der zweite Aufrufer ist ein Entwickler, der Hash-Bucket- oder Sharding-Logik refaktoriert, wo Ausdrücke wie h % m % n einschleichen und ihre Bedeutung je nach Auswertungsreihenfolge still ändern — die Assoziativitätsprüfung über die tatsächlichen Modulpaare in der Produktion verrät, ob eine Umschreibung sicher ist. Der dritte ist jeder, der ein Werkzeug für symbolische Mathematik oder Ausdrucksvereinfachung baut, das wissen muss, welche Umformungsregeln gültig sind, bevor es sie anwendet. Der kostenlose Rechner auf dieser Seite führt exakt denselben Code aus wie der kostenpflichtige Endpunkt — was Sie im Browser testen, erhält auch Ihre Integration. Automatisierte Aufrufe kosten $0.002 pro Anfrage ohne Aufschlag pro Einheit. Senden Sie ein JSON-Objekt mit den Feldern a, b und c; die Antwort spiegelt die Eingaben wider, meldet left und right als Dezimalzeichenketten und liefert das endgültige Urteil im Feld associative — true, wenn beide Klammerungen übereinstimmen, false, wenn nicht.
Anwendungsfälle
Zahlentheorie-Aufgabensatz verifizieren
Prüfen Sie Assoziativitätsbehauptungen über Dutzende von Tripeln in Sekunden, statt jede Klammerung per Hand zu rechnen, und sehen Sie bei Uneinigkeit beide Seiten.
Hash-Bucket- und Sharding-Ausdrücke prüfen
Vergewissern Sie sich, ob h % m % n im Produktionscode sicher umgeklammert werden kann, bevor Sie einen Ausdruck refaktorieren, der Traffic steuert.
Eine Vereinfachungsregel für Ausdrücke antreiben
Lassen Sie ein Werkzeug für symbolische Mathematik entscheiden, ob die Umklammerung eines verketteten Modulos für konkrete Werte gültig ist, bevor die Umformung angewendet wird.
Häufige Fragen
Was kostet das?
$0.002 pro Anfrage ohne Aufschlag pro Einheit. Auf dieser Seite läuft es außerdem kostenlos in Ihrem Browser.
Was genau wird verglichen?
Die linke Klammerung (a % b) % c mit der rechten Klammerung a % (b % c). Es werden beide Werte zurückgegeben und true, wenn sie gleich sind.
Was passiert, wenn ein Divisor null ist?
Die Anfrage wird als ungültige Eingabe abgelehnt. Das umfasst b = 0, c = 0 und den subtileren Fall b % c = 0, der den rechten Divisor zu null machen würde.
Dürfen die ganzen Zahlen negativ sein?
Ja. Der Rest folgt der trunkierten Konvention von JavaScript, C und Java: Das Ergebnis übernimmt das Vorzeichen des Dividenden.
Wie groß dürfen die ganzen Zahlen sein?
Bis zu 2048 Dezimalziffern pro Feld, berechnet mit Arithmetik beliebiger Präzision — ohne Rundung und ohne 2⁵³-Grenze.
Wird die Antwort zwischengespeichert oder ist sie zufällig?
Nein. Die Berechnung ist vollständig deterministisch: Dieselben drei ganzen Zahlen ergeben stets dieselben Werte für left, right und dasselbe Urteil.
Für Entwickler — API-Zugang
Alles auf dieser Seite ist auch per API verfügbar. Dieser Abschnitt richtet sich an Teams, die es in ihre eigenen Systeme einbinden möchten; alle anderen nutzen einfach das Tool oben.
Endpunkt
Authentifizierung per Bearer-Token. Ein einziger POST stellt die Aufgabe in die Warteschlange; das Ergebnis erhalten Sie per Webhook oder über einen signierten Link.
Aufruf aus Ihrem Stack
curl -X POST https://api.kit.forhosting.com/math/is-modulo-associative \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"a":"17","b":"5","c":"3"}'const res = await fetch("https://api.kit.forhosting.com/math/is-modulo-associative", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"a": "17",
"b": "5",
"c": "3"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/math/is-modulo-associative",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"a": "17",
"b": "5",
"c": "3"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/math/is-modulo-associative", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"a":"17","b":"5","c":"3"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"a":"17","b":"5","c":"3"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/math/is-modulo-associative", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Beispiel-Anfrage
{
"a": "17",
"b": "5",
"c": "3"
}Beispiel-Antwort
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "math.is_modulo_associative",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}Die API arbeitet asynchron: Sie erhalten sofort eine task_id. Polling ist mit 1 Anfrage pro Sekunde erlaubt.
Preis
Der Preis steht auf der Seite – keine Tokens, keine Credits. Fehlgeschlagene Aufgaben werden nicht berechnet.
Limits
max_digits | 2048 |
Fehler
| HTTP | Code | Bedeutung |
|---|---|---|
401 | unauthorized | Der API-Schlüssel fehlt oder ist ungültig – prüfen Sie den Authorization-Header (Bearer). |
402 | insufficient_balance | Ihr Guthaben reicht für diese Aufgabe nicht aus – Aufladungen verfallen nicht. |
404 | unknown_type | Unbekannter Aufgabentyp – prüfen Sie das Feld „type“ gegen den Katalog. |
429 | rate_limited | Zu viele Anfragen – warten Sie kurz; Polling ist mit 1 Anfrage pro Sekunde erlaubt. |