# Modulair rekenen

Modulair rekenen, of rekenen modulo een getal, is een vorm van geheeltallig rekenen met een getal dat als bovengrens fungeert, de modulus. Een typisch voorbeeld is de klok waarop modulo 12, of modulo 24, gerekend wordt. In het geval van modulo 12: als het bijvoorbeeld 6 uur is, dan staat de klok 8 uur later niet op 14, maar op 14 − 12 = 2 uur.
Bij modulair rekenen met modulus $m$ of rekenen modulo $m$ wordt gerekend met de getallen $0,1,\ldots ,m-1$, waarna niet $m$ volgt maar weer opnieuw met 0 begonnen wordt. De $m$ getallen 0 tot en met $m-1$ staan als het ware in een kring. Het resultaat van een berekening modulo $m$ is de rest van het resultaat na geheeltallige deling door de modulus $m$. De normale definities van optellen en vermenigvuldigen worden gebruikt, maar als het resultaat groter is dan of gelijk aan $m$ wordt net zo vaak $m$ afgetrokken tot het resultaat weer kleiner is dan $m$. Getallen die modulo $m$ gelijk zijn, die dus een veelvoud van $m$ van elkaar verschillen, noemt men congruent modulo $m$, genoteerd met het symbool $\equiv$. Bijvoorbeeld
    $7\equiv 2{\pmod {5}}$
De verzameling getallen waarmee modulo $m$ gerekend wordt, wordt aangeduid als $\mathbb {Z} /m\mathbb {Z}$, naar het symbool $\mathbb {Z}$ dat de verzameling gehele getallen aanduidt.

## Definities
### Congruentie modulo m

Twee gehele getallen $a$ en $b$ heten congruent modulo het natuurlijke getal $m>1$, als hun verschil $a-b$ een geheel veelvoud is van $m$. Dit wordt genoteerd als:
    $a\equiv b{\pmod {m}}$.
Het getal $m$ wordt de modulus genoemd.
De haakjes in de uitdrukking geven aan dat ${\bmod {m}}$ van toepassing is op de hele vergelijking, en niet alleen op het rechterlid.

#### Equivalentierelatie

Congruentie modulo $m$ is een congruentierelatie, wat inhoudt dat het een equivalentierelatie is die compatibel is met het optellen en vermenigvuldigen van gehele getallen:
Als
    $a_{1}\equiv a_{2}{\pmod {m}}\quad$ en $\quad b_{1}\equiv b_{2}{\pmod {m}}$
dan
    $a_{1}+b_{1}\equiv a_{2}+b_{2}{\pmod {m}}\quad$ en $\quad a_{1}b_{1}\equiv a_{2}b_{2}{\pmod {m}}$

### Modulo-operatie

De modulo-operatie is een binaire operatie $a{\bmod {m}}$ gedefinieerd voor natuurlijke getallen $a$ en een positief geheel getal $m$, zodanig dat $a{\bmod {m}}$ de rest is van de deling van $a$ door $m$, d.w.z. dat $a{\bmod {m}}$ een van de getallen $0,1,\ldots ,m-1$ is waarvoor $a-(a{\bmod {m}})$ een veelvoud van $m$ is. Deze getallen $0,1,\ldots ,m-1$ corresponderen met de equivalentieklassen van de congruentierelatie.
De definitie wordt wel uitgebreid voor het geval dat $a$ of $m$ negatief is. $a{\bmod {m}}$ kan dan negatief kan zijn, maar wel zo dat $a-(a{\bmod {m}})$ een veelvoud van $m$ is.
De operatie $a{\bmod {m}}$ wordt in de meeste programmeertalen met een % weergegeven, dus als a % m. In spreadsheets wordt daarvoor meestal een functie gebruikt zoals MOD(a,m) of REST(a;m).

## Algebra

* $a-(a{\bmod {m}})$ is een veelvoud van $m$.
* $a{\bmod {m}}\equiv a{\bmod {}-m)$
* Als $a$ geen veelvoud is van $p$, geldt
       $a\cdot x\equiv a\cdot y{\bmod {p}}\Leftrightarrow x\equiv y{\bmod {p}}$
Stel dat $a{\bmod {p}}\not \equiv 0$ en $a\cdot x\equiv a\cdot y{\bmod {p}}$.
$a\cdot x-a\cdot y\equiv 0{\bmod {p}}$, dus $a\cdot (x-y)\equiv 0{\bmod {p}}$
$a{\bmod {p}}\not \equiv 0$, dus is $x-y\equiv 0{\bmod {p}}$, dus is het verschil tussen $x$ en $y$ een veelvoud van $p$. $x$ is dus $y$ plus of min een veelvoud van $p$.
$x\equiv y{\bmod {p}}$
    Deze stelling wordt gebruikt bij het bewijs van de kleine stelling van Fermat.
    Algemeen geldt: $a\cdot x\equiv a\cdot y{\bmod {m}}\Rightarrow x\equiv y\operatorname {mod} \left({\frac {m}{\operatorname {ggd} (a,m)}}\right)$
* $(\mathbb {Z} /m\mathbb {Z} )$ is een ring en wel een commutatieve ring met een neutraal element. De elementen van $\mathbb {Z} /m\mathbb {Z}$ noemt men de restklassen modulo $m$.
    In het bijzondere geval dat $m$ een priemgetal is, is $(\mathbb {Z} /m\mathbb {Z} )$ zelfs een lichaam (Ned) / veld (Be).
Een priemgetal $p$ is relatief priem is met alle getallen $1,\ldots ,p-1$ Met behulp van het uitgebreide algoritme van Euclides kunnen voor elke $1\leq n<p$ getallen $x$ en $y$ gevonden worden, zodat $nx+py=\operatorname {ggd} (n,p)$.
$py\equiv 0{\bmod {p}}$
$\operatorname {ggd} (n,p)=1$
$n$
$x$
$nx=1\mod p$

## Toepassing

Geheeltallig rekenen in digitale computers vindt doorgaans plaats modulo $2^{n}$, waarbij $n$ het aantal bits is dat gebruikt wordt om een getal weer te geven. $n$ is dan begrensd door het datatype, vaak de grootte van een processorregister. $n$ heeft in een typisch modern computerprogramma de waarde 32 of 64. Niet-modulair rekenen wordt door sommige programmeertalen ondersteund, maar gaat ten koste van de rekensnelheid. Het teken voor de modulus is in veel programmeertalen het procentteken %.
Het Caesarcijfer, een vorm van encryptie, wordt op de manier van modulair rekenen geïmplementeerd.
In België heeft zowel een gestructureerde mededeling van een overschrijving, alsook het rekeningnummer en het rijksregisternummer als laatste twee cijfers een controlegetal dat modulo 97 congruent is met de voorgaande cijfers. Zo geldt bijvoorbeeld voor de gestructureerde mededeling +++090/9337/55493+++, dat aangeeft: 0909337554 ≡ 93 (mod 97). Ook in de IBAN wordt een modulo 97-berekening uitgevoerd om een tweecijferig controlegetal te berekenen.

## Voorbeeld

Rekenen modulo 7 gebeurt met de getallen 0, 1, ..., 6. De uitkomst van 4 + 5 is niet 9, maar 9 − 7 = + 2. Denkt men de getallen in een kring of herhaald en telt men 5 verder vanaf het getal 4, dan komt men bij 2 uit.
Zo ook is 4 × 5 mod 7 = 6.
De onderstaande tabel geeft alle mogelijkheden voor de optelling modulo 7.
    optelling modulo 7 +0123456 0 0123456 1 1234560 2 2345601 3 3456012 4 4560123 5 5601234 6 6012345
Voor de vermenigvuldiging kan ook een tabel worden gemaakt.
    vermenigvuldiging modulo 7 ×0123456 0 0000000 1 0123456 2 0246135 3 0362514 4 0415263 5 0531642 6 0654321
Omdat 7 een priemgetal is kan men met behulp van deze tabel ook delingen uitvoeren (zie ook onder). Wat is 5 : 4 modulo 7? Noem dit getal q, dan is 4 q ≡ 5 modulo 7. Uit de tabel kan men aflezen dat q = 3, dus 5 : 4 ≡ 3 modulo 7.

## Machtsverheffen

Bij machtsverheffen modulo $m$ mogen de grondtallen worden herleid. Zo is bijvoorbeeld:
    $8^{5}\equiv 3^{5}{\bmod {5}}$, omdat $8\equiv 3{\bmod {5}}$,
    $3^{5}\equiv 3{\bmod {5}}$, een voorbeeld van de kleine stelling van Fermat en
    $3^{0}\equiv 1{\bmod {5}}$, evident.
De stelling van Euler geeft aan wanneer een macht ook naar de exponent kan worden herleid. Als het grondtal van de macht en $m$ relatief priem zijn, dan mag de exponent worden herleid modulo de indicator $\varphi (m)$ van $m$.

### Grote machten

Machtsverheffen modulo $m$ tot grote machten kan relatief gemakkelijk uitgevoerd worden met behulp van machtsverheffing door kwadrateren, aangezien
    $(x{\bmod {m}})^{2}\equiv x^{2}{\bmod {m}}$
Om $298^{187}{\bmod {3}}19$ uit te rekenen kunnen achtereenvolgens de machten $298^{2}{\bmod {3}}19$, $(298^{2})^{2}{\bmod {3}}19$, $(298^{4})^{2}{\bmod {3}}19,\ldots ,298^{128}{\bmod {3}}19$ berekend worden. Omdat $187=128+32+16+8+2+1$, wordt de gevraagde macht bepaald als het product modulo 319 van de overeenkomstige machten.

## Reële getallen

Het komt in meer situaties voor, dat veelvouden van een bepaald geheel getal $a$ buiten beschouwing worden gelaten, zoals dat bij modulair rekenen gebeurt. Een voorbeeld is het rekenen met de tijd van de dag, waarbij veelvouden van 24 uur buiten beschouwing worden gelaten en daarmee corresponderend, rekenen met hoeken, waarbij volledige omwentelingen buiten beschouwing worden gelaten. De groep met betrekking tot de optelling is de cirkelgroep $\mathbb {R} /a\mathbb {Z}$.
Bij de grootheid tijd wordt modulo een dag gerekend. Zo kan men een tijdsduur optellen bij een tijd van de dag, 3 uur en 20 minuten na het tijdstip 23:15 is het bijvoorbeeld 2:35. Om bij een halfuurdienst van een trein te bepalen hoe lang men moet wachten gaat het om de vertrektijd van de trein modulo een half uur en de kloktijd waarop men op het station is, modulo een half uur.

### literatuur

* Carl Friedrich Gauss. Disquisitiones arithmeticae, 1801.

### voetnoten

* ↑ Python. Python Modulo in Practice: How to Use the % Operator.
* ↑ Mod operator (Visual Basic).
* ↑ REST(a;m) - LibreOffice Calc
* ↑ Als schrikkelseconden buiten beschouwing worden gelaten.