Modulær aritmetikk

**Modulær aritmetikk** er basert  på å telle 1,2,3 og så videre opp til et tall *n* hvor man starter med 1 igjen. Tallet *n* kalles modulus for denne tellemåten. Med denne endelige tallmengden kan man utføre de fire vanlige regneoperasjonene som dermed definerer en ny aritmetikk.

Ved bruk av en vanlig klokke utfører man ubevisst modulær addisjon og subtraksjon med modulus *n* = 12. Hvis klokken for eksempel viser 5, vil den vise 2 etter 9 timer. På tilsvarende vis ville den ha vist 8 hvis den hadde blitt avlest 9 timer tidligere. Med matematisk notasjon ville man uttrykke disse to fastsettelsene av tidspunktene som  og . Det betyr at regneoperasjonene gjøres «modulo» tolv, det vil si med modulus 12. Modulær aritmetikk blir derfor noen ganger omtalt som «klokkearitmetikk».

For å angi alle timene i et helt døgn ville man på samme vis bruke en modulus *n* = 24 for å skille mellom timer om natten og om dagen. Den samme, modulære aritmetikken benyttes også når man angir antall  grader i en vinkel hvor *n* = 360&deg; benyttes. 

Det var Carl Friedrich Gauss som etablerte modulær aritmetikk som en viktig del av moderne matematikk i sitt store verk *Disquisitiones Arithmeticae* på begynnelsen av 1800-tallet. Her undersøkte han grunnlaget for konstruksjon av regulære mangekanter. Slike polygoner har samme geometri eller symmetri som en klokke.  I vår tid benyttes modulær aritmetikk innen informatikk som en bestanddel av de viktigste programmeringsspråkene og spiller en sentral rolle i moderne kryptografi. Dessuten inngår den ved bestemmelsen av kontrollsiffer i personnummer samt sjekking av tallene som inngår i ISBN- og IBAN-systemene.

## Heltallsdivisjon

Når man er gitt en viss modulus *n*, kan man for hvert annet heltall *x* dele dette med *n* ved bruk av heltallsdivisjon. Resultatet gir da vanligvis en rest *r* slik at resultatet kan skrives som

:  x = na + r 

hvor heltallet *a* er kvotienten. Resten bestemmes slik at den oppfyller 0 &le; *r*  x \bmod  n = r 

Hvis dividenden *x* økes med et helt antall *m* av modulusen, vil ikke resten forandres. Derfor har man at

:  (x + m\cdot n) \bmod  n =  x \bmod  n 

hvor heltallet *m* også kan være negativt. For eksempel  er -13 mod 5 = (2 - 3&sdot;5) mod 5 = 2.

For å beregne summen *x* + *y* modulo *n* kan man benytte uttrykket

:  (x + y) \bmod  n = (x \bmod  n + y \bmod  n) \bmod  n 

Det følger fra å skrive *x* = *na* + *r* og *y* = *nb* + *s* der *r* = *x* mod *n* og *s* = *y* mod *n*. Da blir (*x* + *y*) mod *n* = (*r* + *s*) mod *n* som gir formelen. Slik kan også beregningen av produktet *xy* mod *n* gjøres enklere når tallen *x* og *y* er spesielt store.

### Potenser

En potens av et tall  kan bli veldig stor når eksponenten blir stor og vil da være krevende å regne ut. Men med modulær aritmetikk kan ikke resultatet bli større enn modulus og beregningen er enklere.  Man kan da benytte at

:  x^m  \bmod  n = (x  \bmod  n )^m  \bmod  n 

som følger fra å skrive *x* = *an* + *r&thinsp;* slik at *x* mod *n* = *r*. Ved bruk av binomialformelen for *x**m* vil da kun leddet *r**m* bidra  da alle andre ledd inneholder *n* som faktor.  Derfor blir også

:  (xy)^m = (x  \bmod  n)^m \cdot (y  \bmod  n)^m \bmod  n 

Dette kan illustreres ved å regne ut for eksempel 59 mod 7. Man kan da benytte at 52 mod 7 = 25 mod 7 = 4 slik at

:  5^4  \bmod  7 = (5^2 \bmod  7)\cdot (5^2 \bmod  7) \bmod  7 = (4\cdot 4) \bmod  7 = 2 

Nå er 59 = 51 + 4 + 4 &thinsp; slik at man har

:  5^9  \bmod  7 = 5\cdot 2\cdot 2 \bmod  7 = 20  \bmod  7 = 6 

På denne måten kan beregning av høye potenser betraktelig forenkles.

## Aritmetiske kongruenser

To heltall *x* og *y* som gir den samme resten *r* når de divideres med *n*, sier å være kongruente med hverandre modulo *n*. Det skrives som 

:  x \equiv y \pmod n 

Her virker nå modulo-operasjonen på begge sider av ekvivalenstegnet.  Det betyr at *x* = *an* + *r*&thinsp;  og *y* = *bn* + *r*&thinsp; hvor *a* og *b* igjen er heltall. Resten oppfyller 0 &le; *r*  a \pm c  \equiv b \pm d \pmod n , \;\;\;   ac  \equiv bd \pmod n 

Hver side av en kongruens kan multipliseres med samme tall. Man kan også dividere hver side med samme tall forutsatt at dette tallet er relativt primisk med modulusen.

### Eksempel

Hvis modulus *n* = 5 og man betrakter de to tallene 13 og 16, så er deres sum modulo 5

: 13 + 16 = 29 \equiv 4 \pmod 5  

Når addendene er store, kan man  først redusere dem ved å benytte at 13 ≡ 3 (mod 5) og 16 ≡ 1 (mod 5) slik at 13 + 16  ≡  3 + 1 (mod 5) = 4.

Betrakter man istedet produktet av disse to tallene, er

: 13 \times 16 = 208 \equiv 3 \pmod 5 

Men dette resultatet kommer også frem ved å ta produktet mellom de kongruente tallene, 13&sdot;16  ≡  3&sdot;1 (mod 5) = 3.

Ved divisjon må man være mer påpasselig. Selv om 45 ≡ 15 (mod 10), så er 9 inkongruent med 3 modulo 10. Derimot er 46  ≡ 18 (mod 7) som betyr at 23 ≡ 9 (mod 7) når man dividerer kongruensen med 2 på begge sider. Det er tillatt når denne faktoren er primisk med modulusen.

## Kongruensklasser

Kongruens mellom to tall er en ekvivalensrelasjon for en gitt modulus som gjør det mulig å dele alle heltallene **Z** opp i ekvivalente klasser. Disse kalles da vanligvis for *kongruensklasser* eller **restklasser**. 

Hvis *n* er modulus, betegner (*n*) eller *n*&thinsp;**Z** den klassen som inneholder tallene

:  (n) = \{0, \pm n, \pm 2n, \pm 3n, \cdots \} 

De er alle kongruente med tallet 0. Tilsvarende vil alle tallene som er kongruente med tallet *a*, tilhøre kongruensklassen (*n*) + *a*. Man vil dermed få *n* forskjellige klasser representert ved tallene {0, 1, 2, 3, .. , *n* - 1}.

Hver slik konkruensklasse kan nå betraktes som et nytt, matematisk objekt og kan betegnes ved det tallet som representerer det. Når for eksempel *n* = 3, har man de tre klassene **0**, **1** og **2**. De kan kombineres ved addisjon ved at et representativt tall fra hver klasse adderes modulo *n*. Med *n* = 3 vil da **1** + **1** = **2** og **1** + **2** = **0**. Klassene utgjør derfor en abelsk gruppe under addisjon hvor klassen **0** = (*n*) er enhetselementet. De danner på denne måten faktorgruppen **Z**/(*n*) =  **Z**/*n*&thinsp;**Z**. Ofte skrives dette mer kompakt som **Z***n* da restklassene også er en syklisk gruppe med *n* element.

### Enheter og nulldivisorer

Man kan også multiplisere sammen kongruensklasser ved å modulært multiplisere representanter for hver av klassene. For eksempel når modulus *n* = 6, blir

:  \mathbf{4}\cdot \mathbf{5} = \mathbf{2}, \;\;\; \mathbf{5}\cdot \mathbf{5} = \mathbf{1} 

Under multiplikasjon utgjør derfor alle restklassene en matematisk ring med **1** = (*n*) + 1 som enhetselement. Den inneholder *n*&thinsp; element og kan bli oppdelt i *enheter* og nulldivisorer. En enhet er definert ved å ha en invers. Det betyr at den er relativt primisk til modulus *n*. Deres antall er derfor gitt ved Eulers totientfunksjon *&phi;*(*n*). Resten av elementene er nulldivisorer. 

For eksempel, for *n* = 6 er **1** og **5** enheter, mens **0**, **2**, **3**, **4** er nulldivisorer. Det kan man se fra at **2**&sdot;**3** = **3**&sdot;**4** = **0**. På samme måte inneholder **Z**12 enhetene **1**, **5**, **7** og **11**. De resterende 8 elementene er nulldivisorer. Produktet av to enheter er en ny enhet illustrert ved **5**&sdot;**7** = **11** i **Z**12. Sammen danner de en abelsk gruppe som kalles **enhetsgruppen** og betegnes (**Z**/*n***Z**)&times; med *&phi;*(*n*) element. 

I det spesielle tilfelle at modulus er et primtall *p*, er **0** den eneste nulldivisor i ringen. Da har hvert element **a** en multiplikativ invers **a**-1 = **1**/**a** som oppfyller at **a**&sdot;**a**-1 = **1**. I såfall går ringen **Z**/*p***Z** over til å bli en endelig tallkropp og betegnes som **F***p* eller GF(*p*). Velger man for eksempel  *p* = 7, er **2**&sdot;**4** = **1** slik at **2**-1 = **1**/**2** = **4** og derfor **3**/**2** = **3**&sdot;**4** = **5**. Videre er **1**/**3** = **5** slik at **1**/**5** = **3**, mens **6** er sin egen invers da **6**&sdot;**6** = **1**.
Slike tallkropper er av stor betydningen innen kryptografi.

### Fermats lille teorem

Den endelige tallkroppen **F***p*  inneholder *p* element. Ser man bort fra elementet **0**, danner de resterende *p* - 1&thinsp; elementene en endelig gruppe hvor elementene kombineres ved multiplikasjon og har **1** som enhetselement. Denne betegnes vanligvis som  (**F***p*)&times; eller GF&times;(*p*).

Hvis man betrakter et element **a**, vil det gi *p* - 1 forskjellige element når det multipliseres med seg selv. Tilsammen utgjør de en syklisk gruppe. Dette kan illustereres for *p* = 5 ved å betrakte for eksempel elementet **2**. Da er **2**&sdot;**2** = **2**2 = **4**,  **2**3 = **4**&sdot;**2** = **3**,  **2**4 = **3**&sdot;**2** = **1**. Hadde man i stedet valgt **a** = **3** eller **4**, ville igjen **3**4 =  **4**4 = **1**. Dette skjer alltid når *p* er et primtall slik at gruppen blir syklisk. 

Generelt kan man da betrakte et vilkårlig element **a** i gruppen med en viss orden *k*. Denne er definert ved at **a***k* = **1**. Ifølge Lagranges teorem er dette tallet *k* en faktor i det totale antall gruppeelement. Det betyr at *p* - 1 = *k&thinsp;m* hvor *m* et et eller annet heltall. Dermed har man med en gang at

:  \mathbf{a}^{p-1} =   \mathbf{a}^{km} = \mathbf{1} 

Det representative tallet *a* i konjugasjonsklassen oppfyller derfor

:  a^{p-1} \equiv 1 \pmod p 

der *a* ikke skal være delbar med *p*. For eksempel med *p* = 7 er 26 = 64 ≡ 1 mod 7. Dette er Fermats lille teorem som har stor betydning i tallteori.

## Wilsons teorem

John Wilson var student ved Universitetet i Cambridge rundt år 1770 da en formulerte et nytt teorem i modulær aritmetikk. Det ble bevist av Lagrange noen få år senere og gjelder når modulus *p* er et primtall. Da er

:  (p - 1)! \equiv -1 \pmod p 

når det uttrykkes ved fakultetsfunksjonen *n*! = 1&sdot;2&sdot;3&sdot;...&sdot;*n*. Alternativt kan man si at (*p* - 1)! + 1 er delelig med *p* når *p* er et primtall. Har man for eksempel *p* = 5, så finner man 4! = 24. Nå er 24 + 1 = 25 som er deilig med 5 i overensstemmelse med teoremet.

Et enkelt bevis kan baseres på at restklassene {**1**, **2**, **3**, ... , **p-1**} er elementer i gruppen (**F***p*)&times;. Da hvert element **a** av disse har sin egen invers **a**-1, kan produktet **2**&sdot;**3**&sdot; ... &sdot;**p - 2** omskrives som (*p* - 3)/2 produkt av delprodukt på formen  **a**&sdot;**a**-1 = **1** som dermed også blir verdien til hele produktet. Resultatet er da

:  \mathbf{1}\cdot \mathbf{2}\cdot \mathbf{3}\cdots (\mathbf{p -2})\cdot(\mathbf{p -1}) = \mathbf{p -1} 

hvor *p* - 1 ≡  -1 (mod *p*) som gir innholdet av teoremet.

Som en konkret illustrasjon av denne argumentasjonen, kan man betrakte *p* = 11. Da finner man ved direkte utregning de inverse elementene **2**-1 = **6**, **3**-1 = **4**, **5**-1 = **9** og **7**-1 = **8** slik at 

: 10! = 1(2 \cdot 6)(3 \cdot 4)(5 \cdot 9)(7 \cdot 8)10  \equiv -1\ (\mbox{mod}\ 11) 

På lignende måte kan man bevise at for en ikke-primisk modulus *n* > 4 vil (*n* - 1)! ≡ 0 (mod *n*). I det spesielle tilfellet  at *n* = 4, blir 3! = 6  ≡ 2 (mod 4). Rent praktisk betyr dette at hvis (*n* - 1)! er delelig med *n* > 4, så er *n* et sammensatt tall.

### Alternativt bevis

Wilsons teorem følger også ganske direkte fra Fermats lille teorem. Det sier at ligningen

:  x^{p-1} - 1 \equiv 0 \pmod p 

er oppfylt for alle   x = \{1, 2, 3, ... , p - 1\} . Fra algebraens fundamentalteorem følger da at man må ha sammenhengen

:  x^{p-1} - 1 \equiv ( x -1)(x -2) (x-3) \cdots (x - p+1) \pmod p 

Ved å sette *x* = *p* vil produktet på høyre side bli (*p* - 1)!. På venstre side vil man stå igjen med -1 da *p*&thinsp;*p* - 1 er null modulo *p*.

## Primitive røtter

Hvert element *a* i enhetsgruppen  (**Z**/*n***Z**)&times; er relativt primisk med modulus *n*, det vil si at største felles faktor  gcd(*a,n*) = 1. Det betyr at det totale antall element gruppen inneholder, er gitt ved totientfunksjonen *&phi;*(*n*). Når *n* er et primtall, er *&phi;*(*n*) = *n* - 1. Eulers teorem sier da at for hvert element *a* må man da ha at

:  a^{\phi(n)} \equiv 1 \pmod n 

Dette kravet vil generelt være oppfylt når *a**r* ≡ 1 (mod *n*) der  heltallet *r* er en faktor i tallet *&phi;*(*n*). Man sier da at elementet *a* har **orden** *r&thinsp;* for modulus *n*. Elementet *a* = 1 har alltid orden *r* = 1 uavhengig av størrelsen til modulus. Alle element i gruppen som har den maksimale orden *r**max* =  *&phi;*(*n*), kalles **primitive røtter**. Denne betegnelsen kommer fra tilsvarende løsninger av sirkeldelingsligningen. Hvert slikt element vil generere alle de andre elementene i gruppen ved at det multipliseres mange nok ganger med seg selv. Det kalles derfor også ofte for en «generator» og gruppen er syklisk.

Når *n* = 3, består gruppen av *&phi;*(3) = 3 - 1 = 2 element som er {1, 2}. Nå er 22 = 4 ≡ 1 (mod 3) slik at 2 er en primitive rot. Likedan for *n* = 4 består gruppen av de to elementene 1 og 3 hvorav 3 er primitiv. For *n* = 5 inneholder gruppen *&phi;*(5) = 5 - 1 = 4 element som er {1, 2, 3, 4}. I dette tilfelle er både 2 og 3 primitive røtter, men ikke 4 da  42 = 16 ≡ 1 (mod 5).  

Hvis *g* er en primitiv rot, vil den inverse

:  g^{-1} = g^{\phi(n) - 1}  \mod n 

også være en primitiv rot. For eksempel når *n* = 7, kan man sjekke at 3 er en primitiv rot. Det inverse elementet er 3-1 = 36 - 1 mod 7 = 243 mod 7 = 5. Av de seks elementene {1, 2, 3, 4, 5, 6} er det bare 3 og 5 som er primitive for denne modulus. Når *n* = 8, er ingen av elementene {1, 3, 5, 7} primitive.

Primitive røtter finnes for alle moduli *n* = 2, 4, *p**k* og 2*p**k* der primtallet *p* > 2 og *k* er et naturlig tall. Det finnes ingen systematisk fremgangsmåte for å identifisere de primitive røttene bortsett fra ved direkte utregning.

## Lineære kongruenser

En eller flere polynomligning kan også løses innen rammen av modulær aritmetikk. De kalles da «kongruensrelasjoner» eller ganske enkelt for kongruenser. Avhengig av polynomenes grad, er de enkleste slike relasjoner lineære eller eventuelt kvadratiske kongruenser. I det spesielle tilfellet at modulus er et primtall *p*, tilsvarer dette å finne  løsninger av ligningene innen tallkroppen **F***p* = **Z**/*p*&thinsp;**Z**.

Det enkleste tilfellet er en ligning med en ukjent. Den skrives som

: ax \equiv c \pmod n 

hvor *a* og *c* er heltall. Denne relasjonen omtales som en *lineær kongruens*. Eventuelle løsninger kan finnes fra den ekvivalente ligningen

:  ax + ny = c 

for ett eller flere heltall *y*. Denne kongruensen er da ekvivalent med en diofantisk ligning.

Løsningen av denne ligningen kan finnes ved bruk av Euklids algoritme og avhenger av den største felles divisor *m* = gcd(*a,n*). Når denne samtidig er en faktor i konstanten *c*, så har kongruensen *m* inkongruente løsninger i intervallet {0, 1, 2, 3, ..., *n* - 1}. Hvis det derimot ikke er tilfelle, finnes det ingen løsninger.

Som et eksempel kan man betrakte den lineære kongruensen

:  4x  \equiv 6 \pmod {10} 

Her er *m* = gcd(4,10) = 2 som også er en faktor i *c* = 6. Derfor finnes det to løsninger som er *x* = 4 og *x* = 9. Hadde man istedet  her hatt *c* = 7, vil det ikke vært noen løsninger.

Når *a* og *n* er relativt primiske, er *m* = 1 og kongruensen har bare en løsning. Det er tilfellet når modulus *n* = *p* er et primtall og den lineære kongruensen kan skrives som ligningen

:  \mathbf{a}\cdot\mathbf{x} = \mathbf{c}

i tallkroppen **F***p*. Løsningen er da formelt gitt som **x** = **a**-1&sdot;**c**. Har man for eksempel *p* = 7, er løsningen av 4*x* ≡ 6 (mod 7) gitt ved *x* = 5 fordi **4**-1 = **2** og **2**&sdot;**6** = **5** i **F**7. På samme vis finner man at 16*x* ≡ 5 (mod 29) har løsningen *x* = 13. Når *p* er stor, er likevel fremgangsmåten med Euklids algoritme den raskeste.

## Se også

* Kvadratisk rest

## Referanser


## Eksterne lenker

* E.W. Weisstein, ''Modular Arithmetic'', Wolfram MathWorld
* Khan Academy, ''An Introduction to Modular Math'', pedagogisk læreverk
* Encyclopediaofmath, ''Congruence'', generell oversikt
* Cut-the-Knot, ''Modular Arithmetic'', spesielt om kongruensklasser