Modulaariaritmetiikan käänteisluku

Modulaariaritmetiikan käänteisluku on modulaari- eli jakojäännösaritmetiikan keskeisiä käsitteitä.

Kokonaisluvut a {\displaystyle a} ja b {\displaystyle b} ovat toistensa käänteislukuja modulo n {\displaystyle n} , missä n {\displaystyle n} on nollasta eroava kokonaisluku, jos

a b 1 ( mod  n ) {\displaystyle ab\equiv 1\quad ({\mbox{mod }}n)}

Modulaariaritmetiikan käänteislukuja voidaan käyttää mm. kongruenssiyhtälöitä ratkaistaessa.

Kongruenssista a b 1 ( mod  n ) {\displaystyle ab\equiv 1\quad ({\mbox{mod }}n)} seuraa, että gcd ( a , n ) = gcd ( b , n ) = 1 {\displaystyle {\mbox{gcd}}(a,n)={\mbox{gcd}}(b,n)=1} . Toisin sanoen luvut a {\displaystyle a} ja n {\displaystyle n} (samoin kuin luvut b {\displaystyle b} ja n {\displaystyle n} ) ovat keskenään jaottomia.

Tämä on välttämätön ja riittävä ehto käänteisluvun olemassaololle.

Modulaariaritmetiikan käänteislukuja voidaan laskea mm. käyttämällä Eulerin lausetta, Fermat'n pientä lausetta tai laajennettua Eukleideen algoritmia.

Laajennettu Eukleideen algoritmi antaa modulaariaritmetiikan käänteislukujen laskemiseen yleispätevän ja tehokkaan laskumenetelmän.

Laskeminen Fermat'n pienen lauseen avulla

Jos n {\displaystyle n} on alkuluku, merk. p {\displaystyle p} , niin

a p 1 1 ( mod  p ) {\displaystyle a^{p-1}\equiv 1\quad ({\mbox{mod }}p)}

ts.

a p 2 a 1 ( mod  p ) {\displaystyle a^{p-2}a\equiv 1\quad ({\mbox{mod }}p)}

Luku a p 2 {\displaystyle a^{p-2}} on siis eräs luvun a {\displaystyle a} käänteisluku modulo p {\displaystyle p} .

Luvun a p 2 {\displaystyle a^{p-2}} pienin ei-negatiivinen jakojäännös modulo p {\displaystyle p} voidaan laskea tehokkaasti modulaariaritmetiikan potenssiinkorotusalgoritmia käyttäen.

Menetelmän rajoituksena on se, että moduulin tulee olla alkuluku.

Laskeminen Eulerin lauseen avulla

Jos gcd ( a , n ) = 1 {\displaystyle {\mbox{gcd}}(a,n)=1} , niin Eulerin lauseen mukaan

a φ ( n ) 1 ( mod  n ) {\displaystyle a^{\varphi (n)}\equiv 1\quad ({\mbox{mod }}n)}

ts.

a φ ( n ) 1 a 1 ( mod  n ) {\displaystyle a^{\varphi (n)-1}a\equiv 1\quad ({\mbox{mod }}n)}

Luku a φ ( n ) 1 {\displaystyle a^{\varphi (n)-1}} on siis eräs luvun a {\displaystyle a} käänteisluku modulo n {\displaystyle n} .

Luvun a φ ( n ) 1 {\displaystyle a^{\varphi (n)-1}} pienin ei-negatiivinen jakojäännös modulo n {\displaystyle n} voidaan laskea tehokkaasti modulaariaritmetiikan potenssiinkorotusalgoritmia käyttäen.

Menetelmän rajoituksena on se, että Eulerin funktion φ ( n ) {\displaystyle \varphi (n)} arvon laskemiseksi luvun n {\displaystyle n} alkutekijöihin jaon pitää yleensä olla tunnettu.

Laskeminen laajennetun Eukleideen algoritmin avulla

Olkoot m {\displaystyle m} ja n {\displaystyle n} kokonaislukuja, 0 < m < n {\displaystyle 0<m<n} ja gcd ( m , n ) = 1 {\displaystyle {\mbox{gcd}}(m,n)=1} . Luvun m {\displaystyle m} käänteisluku modulo n {\displaystyle n} , merk. INV ( m , n ) {\displaystyle {\mbox{INV}}(m,n)} saadaan tällöin rekursiivisesti seuraavasti:

1. Jos m = 1 {\displaystyle m=1} , niin INV ( m , n ) = 1 {\displaystyle {\mbox{INV}}(m,n)=1}

2. Muulloin

INV ( m , n ) = 1 + n ( m INV ( MOD ( n , m ) , m ) ) m {\displaystyle {\mbox{INV}}(m,n)={\frac {1+n(m-{\mbox{INV}}({\mbox{MOD}}(n,m),m))}{m}}}

missä MOD ( n , m ) {\displaystyle {\mbox{MOD}}(n,m)} on funktio, joka antaa luvun n {\displaystyle n} pienimmän ei-negatiivisen jakojäännöksen luvulla m {\displaystyle m} jaettaessa.

Esimerkiksi Mathematica-ohjelmistossa modulaariaritmetiikan käänteisluvun laskeva funktio voitaisiin tätä rekursiota käyttäen määrittää yhdellä rivillä:

Inv [ m _ , n _ ] := If [ m == 1 , 1 , ( 1 + n ( m Inv [ Mod [ n , m ] , m ] ) ) / m ] {\displaystyle {\mbox{Inv}}[m\_,n\_]:={\mbox{If}}[m==1,1,(1+n*(m-{\mbox{Inv}}[{\mbox{Mod}}[n,m],m]))/m]}

Mathematica-ohjelmistosta löytyy tähän tarkoitukseen kuitenkin myös valmiiksi ohjelmoitu funktio.