Il modulo è associativo?
L'API di associatività del modulo risponde a una domanda ingannevolmente semplice: per tre interi dati, il raggruppamento conta?
Esegui gratis nel browser
Calcola entrambi gli ordinamenti dell'operazione di resto — (a % b) % c a sinistra e a % (b % c) a destra — e indica se coincidono. Invia tre interi e riceve entrambi i lati del confronto più un semplice true o false, calcolati su interi a precisione arbitraria, quindi la risposta è esatta per valori di qualsiasi dimensione realistica. Se una posizione di divisore fosse zero — b, c oppure il resto intermedio b % c — la richiesta viene rifiutata con un errore chiaro invece di una sorpresa di divisione per zero. È un controllo piccolo, ma è quello che decide se un'espressione con modulo concatenato nel Suo codice significa davvero ciò che Lei pensa.
Perché il raggruppamento conta per l'operazione di resto
Addizione e moltiplicazione sono associative: (1 + 2) + 3 è uguale a 1 + (2 + 3), sempre, quindi nessuno pensa alle parentesi. L'operazione di resto non gode di questa garanzia. L'espressione a % b % c è ambigua sulla carta, e la maggior parte dei linguaggi di programmazione la risolve valutando da sinistra a destra, producendo (a % b) % c. Se questo equivalga al raggruppamento alternativo a % (b % c) dipende interamente dai tre valori coinvolti. Prenda a = 17, b = 5, c = 3: il raggruppamento a sinistra dà (17 % 5) % 3 = 2 % 3 = 2, mentre quello a destra dà 17 % (5 % 3) = 17 % 2 = 1. I due raggruppamenti non coincidono, quindi il modulo non è associativo per quella terna. Ma per a = 8, b = 5, c = 3 entrambi i lati danno 0, e l'operazione risulta associativa in quel caso. Questa funzionalità esiste perché tale distinzione è facile da sbagliare in una revisione del codice e noiosa da verificare a mano su un intero insieme di parametri candidati: una sola chiamata la risolve in modo deterministico, restituendo entrambi i valori intermedi così può vedere esattamente dove i due raggruppamenti divergono, invece di fidarsi ciecamente di un semplice booleano.
Come viene calcolato il controllo e la regola del divisore zero
Segui le etichette e le unità indicate per ogni campo. Se manca qualcosa o un valore non è ammesso, la pagina indica cosa correggere.
Dove questo controllo merita il suo posto
Il chiamante più comune è chi insegna o studia la teoria dei numeri: le questioni di associatività compaiono di continuo nei manuali e negli esercizi, e poter verificare un'affermazione su centinaia di terne in pochi secondi trasforma un lavoro tedioso in un esperimento. Il secondo chiamante è uno sviluppatore che rifattorizza logica di hash-bucket o di sharding, dove espressioni come h % m % n si insinuano e cambiano silenziosamente significato a seconda dell'ordine di valutazione — verificare l'associatività sulle coppie di moduli realmente in produzione indica se una riscrittura è sicura. Il terzo è chiunque costruisca uno strumento di matematica simbolica o di semplificazione di espressioni, che deve sapere quali regole di riscrittura sono valide prima di applicarle. Il calcolatore gratuito su questa pagina esegue esattamente lo stesso codice dell'endpoint a pagamento, quindi ciò che testa nel browser è ciò che la Sua integrazione riceverà. Le chiamate automatiche costano $0.002 a richiesta, senza sovrapprezzo per unità. Invii un oggetto JSON con i campi a, b e c; la risposta riporta gli input, indica left e right come stringhe decimali e dà il verdetto finale nel campo associative — true quando i due raggruppamenti coincidono, false quando non coincidono.
Casi d'uso
Verificare una serie di esercizi di teoria dei numeri
Controlli le affermazioni di associatività su decine di terne in pochi secondi invece di calcolare a mano ogni raggruppamento, e veda entrambi i lati quando non coincidono.
Verificare espressioni di hash-bucket e sharding
Confermi se h % m % n può essere raggruppato in modo sicuro nel codice di produzione prima di rifattorizzare un'espressione che instrada il traffico.
Alimentare una regola di semplificazione di espressioni
Permetta a uno strumento di matematica simbolica di decidere se riassociare un modulo concatenato è valido per valori concreti prima di applicare la riscrittura.
Domande frequenti
Quanto costa?
$0.002 a richiesta, senza sovrapprezzo per unità. È anche gratuito eseguirlo nel browser su questa pagina.
Cosa confronta esattamente?
Il raggruppamento a sinistra (a % b) % c contro quello a destra a % (b % c). Restituisce entrambi i valori e true quando sono uguali.
Cosa succede se un divisore è zero?
La richiesta viene rifiutata come input non valido. Questo copre b = 0, c = 0 e il caso più sottile in cui b % c = 0, che renderebbe zero il divisore del lato destro.
Gli interi possono essere negativi?
Sì. Il resto segue la convenzione troncata di JavaScript, C e Java: il risultato prende il segno del dividendo.
Quanto grandi possono essere gli interi?
Fino a 2048 cifre decimali per campo, calcolati con aritmetica a precisione arbitraria, quindi senza arrotondamenti né limite a 2⁵³.
La risposta è memorizzata in cache o casuale?
No. Il calcolo è completamente deterministico: gli stessi tre interi producono sempre gli stessi left, right e verdetto.
Per sviluppatori — accesso via API
Tutto quello che vedi in questa pagina è disponibile anche via API. Questa sezione è per i team che vogliono integrarlo nei propri sistemi; chi non ne ha bisogno può semplicemente usare lo strumento qui sopra.
Endpoint
Autenticazione con Bearer token: un POST mette in coda l'attività e il risultato arriva via webhook o link firmato.
Chiamala dal tuo 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)Esempio di richiesta
{
"a": "17",
"b": "5",
"c": "3"
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "math.is_modulo_associative",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L'API è asincrona: ricevi subito un task_id e puoi fare polling fino a 1 richiesta al secondo.
Prezzi
Prezzo pubblicato, senza token né crediti. Se l'attività fallisce, non paghi.
Limiti
max_digits | 2048 |
Errori
| HTTP | Codice | Significato |
|---|---|---|
401 | unauthorized | Chiave API mancante o non valida: controlla l'header Authorization. |
402 | insufficient_balance | Credito esaurito: ricarica per continuare a eseguire attività. |
404 | unknown_type | Tipo di attività sconosciuto: controlla il campo type della richiesta. |
429 | rate_limited | Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo. |