# Omgekeerde congruentiegenerator

Een omgekeerde congruentiegenerator is een niet-lineaire toevalsgeneratoren die de modulaire multiplicatieve inverse gebruikt (indien aanwezig) om het volgende getal te genereren. Een omgekeerde congruentiegenerator is een rekenkundige bewerking die de bekende nadelen van lineaire congruentiegeneratoren door de stelling van Marsaglia vermijdt. In het bijzonder ontstaan geen hypervlakken. Als men gebruikmaakt van omgekeerde congruentiegeneratoren voor de Box-Muller-methode, wordt spiraalgedrag vermeden. In ruil daarvoor eist deze methode een hogere rekenkundige complexiteit.

## Algemeen

De omgekeerde congruentiegenerator bestaat uit de volgende componenten:
* Modulo $p\in \mathbb {P}$ ($\mathbb {P}$ staat zoals gewoonlijk voor de verzameling van priemgetallen)
* Factor $a\in \{0,\ldots ,p-1\}$
* Toename $b\in \{0,\ldots ,p-1\}$
* Startwaarde $y_{0}\in \{0,\ldots ,p-1\}$
De standaardformule voor een omgekeerde congruentiegenerator is
    $y_{n+1}\equiv ay_{n}^{-1}+b\equiv ay_{n}^{p-2}+b{\pmod {p}}$.
Voor uitleg van de symboliek, zie modulair rekenen. Wegens $p\in \mathbb {P}$ is er voor elke $y_{n}\neq 0$ een unieke multiplicatieve inverse van elk element, $y_{n}^{-1}$, zodat $y_{n}\,y_{n}^{-1}\equiv 1$. Alleen om $y_{n}=0$ moet je je nog zorgen maken. Formeel zou het element $\infty$ het omgekeerde van $0$ worden. Aangezien $\infty$ niet vertegenwoordigd is, kan deze het best overgeslagen worden door het te schrijven als $0^{-1}=0$.

## Periodelengte

De maximale periodelengte kan niet groter zijn dan $p$. Dit wordt bereikt als en slechts als de polynoom $x^{2}-bx-a$ een primitieve veelterm in $\mathbb {Z} _{p}$ is.

## Hypervlak gedrag

In tegenstelling tot lineaire congruentiegeneratoren waarvan de waarden zo weinig van hypervlakken verschillen, kan men hier aantonen dat elk hypervlak in $\mathbb {Z} _{p}^{k}$ ten hoogste $k$ punten van de vorm
    $(x_{1},\ldots ,x_{k}),(x_{2},\ldots ,x_{k+1}),\ldots$
bevat, zo lang $x_{l}\ldots x_{l+k-2}\neq 0$. Door deze voorwaarde worden er nauwkeurig $k-1$ punten afgescheiden. Daarbij kan $k\geq 2$ gekozen worden.

## Inverse generatoren met samengesteld modulo

Ter vervanging van de modulo deling door het afsnijden van de meest significante bits zou het handig zijn om modulo $m$ voor de berekening
    $y_{n+1}\equiv (ay_{n}^{p-2}+b){\pmod {m}}$
toe te staan die geen priemgetal, maar een macht van 2 is. Daarvoor moet $y_{0}$ niet gegeven zijn, en $a,\,b$ moeten zo vastgesteld worden dat alle $y_{n}$ oneven zijn, omdat dan het inverse element van $y_{n}$ eenduidig berekend kan worden. De periodelengte is hoogstens $m/2$. Indien aan de volgende voorwaarden is voldaan, is het precies $m/2$:
* $m=2^{e}{\mbox{ met }}e\geq 3$
* $a\equiv 1{\pmod {4}}$
* $b\equiv 2{\pmod {4}}$

## Expliciete inverse generatoren

Soms leest men de definitie als:
    $y_{n+1}\equiv (an+b)^{-1}\equiv (an+b)^{p-2}{\pmod {p}}$
of
    $y_{n+1}\equiv (a(n+y_{0})+b)^{-1}\equiv (a(n+y_{0})+b)^{p-2}{\pmod {p}}$
De laatste is geen generalisatie van bovenstaande formule; deze wordt onmiddellijk verkregen door vermenigvuldiging van bovenstaande formule.

### Periodelengte

De maximale periode lengte is weer gelijk aan $p$, en zal worden bereikt, als $a\neq 0$.