E' noto, nell'aritmetica tradizionale, che il quoziente, q, è il risultato della divisione fra il dividendo x e il divisore m, mentre R è l'eventuale resto.
Nell'aritmetica modulare, in luogo della usuale notazione impiegata per la divisione, si utilizza questa notazione: x(mod m)= R, e si dice: "x modulo m è uguale a R".
In pratica, la divisione in aritmetica modulare, è ottenuta secondo questo procedimento:
1) si calcola la divisione con la tecnica tradizionale (x : m = q);
2) si moltiplica la parte intera del quoziente per il divisore e la si sottrae dal dividendo (x - m * Q);
3) il risultato della sottrazione, è R
esempi:
10 (mod 4) = 2 | infatti 10:4 = 2,5 e 10-4*2 = 2 = R |
74 (mod 7) = 4 | infatti 74:7 = 10, 57 e 74-7*10 = 4 = R |
57 (mod 57) = 0 | infatti 57:57 = 1 e 57-57*1 = 0 = R |
37 (mod 36) = 1 | infatti 37:36 = 1,02 e 37-36*1 = 1 = R |
I calcoli proposti come esempi, possono essere effettuti anche con la calcolatrice fornita con Windows®. In modalità scientifica, la calcolatrice si presenta come nella figura sotto.
Ad esempio, per effettuare il calcolo 74 mod 7, digitate il numero "7", poi clic su "mod", poi digitate il numero 7, infine clic su "=".
Per un numero esponenziale, come
1637 mod 77 = 58, digitate "37", poi clic su x^y, quindi clic su "MOD", poi digitate "37", infine clic su "="
Per la notazione: x(mod m) = R, valgono le seguenti proprietà:
tutti i possibili resti sono una quantità pari ad m e con valori compresi fra 0 ed m-1
esempio: 31(mod 45)= 31 (per definizione);
esempio: 38 (mod 37) = 1
Con gli elementi di aritmetica modulare esaminati, è possibile generare numeri pseudo-casuali. I metodi di generazione di numeri pseudo-casuali prevalentemente usati sono i cosiddetti metodi congruenziali (si dice che a è congruente con b se a mod m = b mod m), basati sulla divisione mod m
Per generare numeri casuali, si possono utilizzare tre tipi di metodi congruenziali:
dove: ri, a, b,
m sono interi non negativi e ri
è compreso tra 0 ed m.
Vengono chiamati: a moltiplicatore, b
incremento e m modulo, mentre ro (valore iniziale della sequenza), è detto seme.
Tutti questi metodi danno origine a sequenze periodiche,
con periodo minore o al più uguale ad m. Per ottenere il periodo massimo, devono essere rispetate queste condizioni:
La tabella riporta un semplice esempio per la generazione di numeri casuali compresi fra 0 e 7 (mod 7) e fra 0 e 8 (mod 8). Pero', nel primo caso si sono scelti parametri ottimizzati; nel secondo, no (m è multiplo di 4, e per a si è scelto il valore 16 invece di a-1=17). Il lettore puo' verificare che la relazione (17x+5) mod 8 produce effettivamente una sequenza pseudocasuale di periodo 8.
x | (15x+5)mod 7 | x | (15x+5)mod7 | x | (16x+5) mod 8 | x | (16x+5)mod 8 |
1 | 20:7=6 | 8 | 125:7=6 | 1 | 21:8=5 | 8 | 133:8=5 |
2 | 35:7=0 | 9 | 140:7=0 | 2 | 37:8=5 | 9 | 149:8=5 |
3 | 50:7=1 | 10 | 155:7=1 | 3 | 53:8=5 | 10 | 165:8=5 |
4 | 65:7=2 | 11 | continua | 4 | 69:8=5 | 11 | continua |
5 | 80:7=3 | 12 | 5 | 85:8=5 | 12 | ||
6 | 95:7=4 | 13 | 6 | 101:8=5 | 13 | ||
7 | 110:7=5 | 14 | 7 | 117:8=5 | 14 |
In realtà, per la generazione di numeri pseudocasuali, si sceglie per m il valore piu' elevato possibile, al fine di ottenere un periodo elevato. Infatti, comunemenet i linguaggi di programmazione (Basic, C, Java, JavaScript, ecc.) dispongono di funzioni già predisposte per restituire un valore casuale. Ma, per evitare di ottenere ogni volta gli stessi numeri, la generazione viene automaticamente effettuata con m molto elevati.
E' importante scegliere m in modo tale da assicurarsi una
sequenza di periodo abbastanza lungo; in ogni caso, la lunghezza del periodo
deve essere superiore alla quantità di numeri casuali richiesti dal problema che interessa.
Quando la lunghezza del periodo è uguale ad m, si
dice che il generatore ha periodo pieno.