Calcolatore Modulo

Resto (a mod b)
Avanti

L’operazione modulo (o “mod”) restituisce il resto dopo la divisione intera: 17 mod 5 = 2 perché 17 = 3·5 + 2. È il cuore dell’aritmetica oraria, della crittografia, delle funzioni hash e del modello “ogni N-esima riga” in SQL. Questo calcolatore accetta operandi interi o decimali, mostra esplicitamente il quoziente e il resto, e gestisce le differenze di convenzione del segno tra i linguaggi (il % di Python ≠ il % di C per i negativi).

Come calcolare a mod b

  1. 1

    Inserisci dividendo (a) e divisore (b)

    Qualsiasi numero; decimali e negativi OK.

  2. 2

    Scegli la convenzione del segno

    Divisione troncata (C, Java, Go), divisione arrotondata (Python, Ruby, convenzione matematica).

  3. 3

    Leggi quoziente e resto

    a = q·b + r, con la regola scelta per il segno di r.

  4. 4

    Guarda l'espressione matematica

    I valori sostituiti rendono visibile ogni passaggio.

Due convenzioni per i numeri negativi

Per operandi positivi, tutte le convenzioni concordano: 17 mod 5 = 2. Per i negativi, i linguaggi differiscono:

Linguaggio -17 mod 5 Convenzione
Python, Ruby 3 Arrotondata
C, Java, Go, JS -2 Troncata
Libri di matematica 3 Arrotondata (di solito)

Divisione arrotondata: il quoziente si arrotonda verso −∞. Il resto ha sempre il segno del divisore: stesso segno di b. Divisione troncata: il quoziente si arrotonda verso zero. Il resto ha il segno del dividendo: stesso segno di a.

Per a = -17, b = 5:

  • Troncata: q = -3 (arrotondato verso 0), r = -17 − (-3)·5 = -2.
  • Arrotondata: q = -4 (arrotondato verso -∞), r = -17 − (-4)·5 = 3.

Entrambi sono corretti data la convenzione. Scegli in base al tuo linguaggio.

Dove appare il modulo

  • Tempo. Minuti in un’ora, giorni della settimana, secondi in un giorno, tutta aritmetica mod.
  • Tabelle hash. hash(key) mod table_size sceglie un bucket.
  • Pianificazione round-robin. task_i mod worker_count assegna lavoro.
  • Crittografia. RSA e Diffie-Hellman si basano su mod n con grandi numeri primi.
  • Ogni N-esima riga. In SQL: WHERE id % 3 = 0.
  • Controllo pari/dispari. n mod 2 == 0 significa pari.
  • Modelli alternati. Strisce di righe, colorando ogni altro elemento.
  • Buffer circolari. (index + 1) mod size si avvolge.

Identità utili

  • (a + b) mod n = ((a mod n) + (b mod n)) mod n
  • (a · b) mod n = ((a mod n) · (b mod n)) mod n
  • (a^k) mod n può essere calcolato tramite esponenziazione modulare veloce in O(log k), critico per la crittografia con numeri grandi.
  • a mod 1 = 0 per qualsiasi intero a.
  • a mod a = 0.

Modulo decimale

Per numeri reali, la definizione naturale è a mod b = a − b · floor(a/b). 7.5 mod 2.5 = 0 perché 7.5 è un multiplo esatto. 7.6 mod 2.5 = 0.1.

L’operatore % di JavaScript funziona su numeri reali; fmod di Python fa mod reale troncato; % di Python fa mod reale arrotondato.

Esempi risolti

  • 100 mod 7: 100 = 14·7 + 2, quindi resto 2.
  • 25 mod 4: 25 = 6·4 + 1, quindi resto 1.
  • -10 mod 3 (arrotondato): -10 = -4·3 + 2, resto 2. (Troncato darebbe -1.)
  • 17.5 mod 5: 17.5 = 3·5 + 2.5, resto 2.5.

Domande frequenti

Nella maggior parte dei casi sono sinonimi. Formalmente, “modulo” implica spesso la convenzione matematica (arrotondata), mentre “resto” si riferisce spesso alla variante troncata (stile C). I nomi si riflettono nella documentazione dei linguaggi; quando è importante, specifica la convenzione.

Python segue la convenzione matematica (arrotondata), che mantiene il segno del resto corrispondente al divisore. C segue la convenzione dell’ALU hardware (troncata), dove il segno del resto corrisponde al dividendo. Nessuna delle due è sbagliata; sono scelte diverse.

No, la divisione per zero è indefinita. Il calcolatore restituisce un errore per b = 0.

Di solito, sì. Controlla la specifica del tuo linguaggio per la gestione dei numeri negativi, Python e Ruby differiscono da C, Java, Go e JavaScript.

Per la matematica in stile RSA con numeri a 2048 bit, usa una libreria dedicata (il pow(a, b, n) di Python, il BigInteger.modPow di Java). Questo calcolatore gestisce valori quotidiani, non quelli di grado crittografico.

Strumenti correlati

Strumento disponibile in altre lingue