1. Modulaariaritmetiikkaa Yksinkertaisissa salausjärjestelmissä käytettävä matematiikka on paljolti lukuteoriaan pohjautuvaa suurten lukujen modulaariaritmetiikkaa (lasketaan kokonaisluvuilla modulo n). Lukuteorian esitykset eivät yleensä kiinnitä huomiota siihen, missä määrin tulokset ovat laskettavia tai puhtaasti teoreettisia. Esimerkiksi aritmetiikan peruslause (jokainen kokonaisluku voidaan esittää oleellisesti yksikäsitteisellä tavalla alkulukujen tulona) on puhtaasti teoreettinen tulos; suurille luvuille ei tunneta mitään tehokasta tapaa löytää k.o. luvun alkutekijöitä. Sen sijaan Eukleideen algoritmi on varsin nopea tapa määrätä kahden luvun suurin yhteinen tekijä. Jotta tämä ero ( laskettava puhtaasti teoreettinen) hieman valkenisi, selvitetään aluksi, miten tietokoneet käsittelevät lukuja; miten luvut esitetään ja miten niillä lasketaan. Tässä yhteydessä on hyvä huomata, että salausjärjestelmien kaipaamat luvut ovat suuria, tyypillisesti sadan usean sadan numeron mittaisia. Tietokoneella esitettävän tiedon perusyksikkö on bitti, jonka arvona voi olla nolla tai yksi (tai oikeammin, koska bitti kuvaa tietokoneen tilaa, arvon pitäisi olla off tai on ). Kun useampia bittejä asetetaan jonoon, on bitit tapana ryhmitellä kahdeksan bitin muodostamiksi tavuiksi. Tällaiset kahdeksan bitin jonot (b 7, b 6,..., b 1, b 0 ) voidaan tulkita luvuksi käyttämällä kaksikantaista lukujärjestelmää, (b 7, b 6,..., b 1, b 0 ) b 7 2 7 + b 6 2 6 + + b 1 2 + b 0. Lukuna yhtä tavua vastaa siis luvut 0, 1, 2,..., 2 7 + 2 6 + + 2 + 1 = 255. 2 Luvuilla laskemiseen tietokoneet käyttävät yhtälailla lukujen esittämistä kaksikantaisina (yhteen- ja kertolaskutaulut ovat helppoja!). Tietokoneen prosessorit osaavat käsitellä usean tavun muodostamaa jonoa yhtenä lukuna. Esimerkiksi nykyaikaisten ns. 64-bittisten tietokoneiden suurin (etumerkitön) kokonaisluku on 63 2 j = 2 64 1 1.8447 10 19. Suuremmat kokonaisluvut esitetään taulukkoina (x n, x n 1,..., x 1, x 0 ), joissa jokaisessa taulukkopaikassa on 64-bittinen luku x j. Tällaisia taulukoituja suureita koneiden prosessorit eivät osaa suoraan käyttää, vaan niiden käsittely tapahtuu ohjelmallisesti, mikä tekee laskemisesta huomattavasti hitaampaa. Tarkastellaan seuraavaksi lukujen yhteen- ja kertolaskun toteuttamisen ideaa (vähennys- ja jakolaskusta ks. esim. [7]). 1.1. Luvuilla laskemisesta. Olkoon b Z, b 2. Kokonaislukujen jakoyhtälöstä 3 seuraa, että jokainen ei-negatiivinen kokonaisluku x on esitettävissä muodossa x = x j b j, missä x j Z, 0 x j b 1. 1 Viimeksi muutettu 10.9.2012. 2 Yhdellä tavulla voidaan siis esittää 256 erilaista merkkiä. Tietokoneen tekstin esityksessä käytetyt ns. ISO Latin -koodaukset perustuvat tähän ideaan. Uudempi Unicode-koodaus UTF-16 käyttää kahta tavua yhden merkin esittämiseen, jolloin on mahdollista esittää 2 16 1 = 65535 eri merkkiä. 3 Kaikille x Z on olemassa yksikäsitteiset q Z ja r Z siten, että x = q b + r ja 0 r < b. 1
Jono (x n, x n 1,..., x 1, x 0 ) b on luvun x b-kantainen esitys. 4 Luvut x j on luvun (engl. number) x b-kantaisen esityksen numeroita (engl. digits). Vaikka tarkoitus on selvittää, miten luvuilla lasketaan 64-bittisellä tietokoneella eli kun b = 2 64, on esimerkkeinä aluksi hyvä miettiä tutun kymmenjärjestelmän ja kaksikantaisen järjestelmän lukuja. Kannattaa huomata, että tietokone osaa laskea vain numeroilla x j, ei itse summalla n x j b j. Summa n x j b j on nyt hyvä tulkita vain taulukoksi, missä kantaluvun b potenssi b j on taulukon j. paikkaan osoittava indeksi: n x j b j x n x n 1... x 1 x 0 2 Tarkastellaan kahden b-kantaisen luvun yhteenlaskua. Olkoot x = x j b j ja y = y j b j, missä x j, y j Z ja x j, y j {0,..., b 1}. Summalle on x + y = (x j + y j ) b j, mutta tässä voi olla x j + y j > b 1. Koska x j b 1 ja y j b 1, on kuitenkin x j + y j 2(b 1). Jos x j + y j > b 1, on luvulle z j := x j + y j b b 2. Siis (x j + y j ) b j = z j b j + b j+1. Tämä yhtälö merkitsee, että summan x + y j + 1. numeroon tulee summan x j+1 + y j+1 lisäksi muistinumero, jos x j + y j > b 1. Muistinumero ei kuitenkaan vaikuta merkitsevämpiin numeroihin x k + y k, k > j + 1, koska x j+1 + y j+1 b + 1 b 1. Tämä antaa seuraavan algoritmin summan laskemiseen (1) Asetetaan muistinumeroksi m 0 := 0. (2) Kun j = 0, 1,..., n, asetetaan (a) jos x j + y j + m j b 1, olkoon z j := x j + y j + m j ja m j+1 := 0, (b) muuten z j := x j + y j b + m j ja m j+1 := 1. (3) Lopuksi z n+1 := m n+1. (4) Palautetaan n+1 z j b j. Tarkastellaan kahden b-kantaisen luvun kertolaskua. Olkoot x = x j b j ja y = y k b k, missä x j, y j Z ja x j, y j {0,..., b 1}. Tulo x voidaan laskea summana x y = x y k b k, missä x y k b k = x j y k b j+k. k=0 4 b = 10: desimaalinen; b = 2: binäärinen; b = 8: oktaalinen; b = 16: heksadesimaalinen; b = 60: heksagesimaalinen. Heksadesimaaliluvut x 0 {10,..., 15} esitetään yleensä kirjaimin A,..., F. Usein b kantaisen luvun numeroita x j kutsutaan merkeiksi ja merkinnän (x n, x n 1,..., x 1, x 0 ) b sijasta käytetään tiiviimpää (x n x n 1... x 1 x 0 ) b tai vain x n x n 1... x 1 x 0. k=0
Nämä kaavat voidaan lukea seuraavasti: vasemman kaavan mukaan tulo x y voidaan laskea yhteenlaskulla ja oikeanpuoleisen kaavan nojalla summassa esiintyvät tulot x y k b k ovat tulojen x j y k b j+k summia. Tulot x j y k b j+k puolestaan ovat b-kantaisen järjestelmän yksinumeroisten lukujen x j ja y k tuloja siirrettynä indeksin j + k osoittamaan paikkaan. Koska x j b 1 ja y k b 1, on x j y k (b 1) 2 = b (b 2) + 1, joten tulosta x j y k syntyvä muistinumero on suurimmillaan b 2, jolloin tulosta x j y k jää indeksin j + k osoittamaan paikkaan numero yksi. 1.2. Suurin yhteinen tekijä. Eukleideen algoritmi on kokonaislukujen jakoyhtälöä käyttävä menetelmä, jolla voidaan määrätä kahden kokonaisluvun a, b Z suurin yhteinen tekijä d = syt(a, b). 5 Kerrattakoon määritelmiä ja eräitä merkintöjä. Määritelmä 1.1. Olkoot a, b, c ja d Z. Sanotaan, että c jakaa luvun a, jos on olemassa k Z siten, että a = k c; tällöin merkitään c a. Luku c on lukujen a ja b yhteinen tekijä, jos c a ja c b. Luku d on lukujen a ja b suurin yhteinen tekijä, jos d on lukujen a ja b yhteinen tekijä ja lisäksi pätee: jos c a ja c b, niin c d. Huomautus 1.2. Lukujen jaollisuus on järjestysrelaatio positiivisten kokonaislukujen joukossa Z + (tai yhtä hyvin kaikkien kokonaislukujen joukossa Z). Kaikkia lukupareja ei jaollisuuden perusteella voi asettaa järjestykseen (esimerkiksi 4 6 ja 6 4), mutta jaollisille luvuille jaollisuusjärjestys vastaa lukujen tavallista suuruusjärjestystä: jos a Z + ja b Z + ovat jaollisia keskenään, on a b, jos ja vain a b. Muistettakoon, että järjestysrelaatio (tarkemmin osittainen järjestys) joukossa X on on binäärinen relaatio, jolle on voimassa (i) x x kaikille x X (refleksiivisyys) (ii) jos x y ja y x, niin x = y (antisymmetrisyys) (iii) jos x y ja y z, niin x z (transitiivisuus) Järjestys on täydellinen, jos jokaiselle parille x, y X on voimassa x y tai y x (vertailtavuus). Tässä jaollisuuden avulla määritelty järjestysrelaatio on siis osittainen, mutta ei täydellinen järjestys joukossa Z. Kokonaislukujen tavallinen järjestysrelaatio määritellään seuraavasti: x y, jos on olemassa z N siten, että y = x + z. 6 Tämä on täydellinen järjestys. Suurin yhteinen tekijä on siis jaollisuusjärjestyksen mielessä yhteisistä tekijöistä suurin. 1.3. Eukleideen algoritmi. Olkoot r 0, r 1 N, r 1 0. Kokonaislukujen jakoyhtälön nojalla on olemassa yksikäsitteiset luvut q 1 ja r 2 N siten, että r 0 = q 1 r 1 + r 2 ja 0 r 2 < r 1. Luku q 1 on lukujen r 0 ja r 1 kokonaislukuosamäärä ja r 2 (kokonaisluku-)jakojäännös. Merkitään rem(r 0, r 1 ) := r 2. 5 Suomen kielisessä matemaattisessa tekstissä suurimmalle yhteiselle tekijälle käytetään useimmiten suomen kielistä lyhennettä syt(a, b). Englanninkielisissä teksteissä käytetään gcd(a, b), greatest common divisor, saksankielisissä ggt(a, b), gröster gemeinsamer Teiler, ja ranskankielisissä pgcd(a, b), plus grand commun diviseur. Osa vanhempaa kirjallisuutta tyytyy lyhennettyyn merkintään (a, b), mikä pitää pitää erillään järjestystä parista ja lukusuoran avoimesta välistä. Lisäsekaannusta voi aiheuttaa, että kokonaislukujen a ja b virittämälle ideaalille {s a + t b s, t Z} käytetään myös merkintää (a, b). 6 N := {x Z x 0}, Z + := {x Z x > 0}. 3
Otetaan käyttöön seuraavat funktiot: Jokaiselle x R asetetaan (ks. [6, 1.2.4] tai [3, 3.1] 7 ) x := suurin kokonaisluku n siten, että n x (luvun x lattia); x := pienin kokonaisluku n siten, että n x (luvun x katto). Jakoyhtälön osamäärä ja jakojäännös voidaan nyt ilmaista q 1 = r 0 /r 1, kun r 1 0, ja r 2 = rem(r 0, r 1 ) = r 0 q 1 r 1 = r 0 r 1 r 0 /r 1. Kun jakoyhtälöä toistetaan vaihtamalla jaettavan paikalle jakaja ja valitsemalla uudeksi jakajaksi saatu jakojäännös, löydetään luvut l, q i, r i N, 1 i l, siten, että 0 r i 1 < r i, kun 1 i l, ja r 0 = q 1 r 1 + r 2, (1.1) r 1 = q 2 r 2 + r 3,. r l 2 = q l 1 r l 1 + r l, r l 1 = q l r l + 0. Väite 1.3. Eukleideen algoritmilla (1.1) saatu luku r l, eli viimeinen nollasta eroava jakojäännös, on lukujen r 0 ja r 1 suurin yhteinen tekijä, r l = syt(r 0, r 1 ). Suurin yhteinen tekijä voidaan myös karakterisoida seuraavasti: syt(r 0, r 1 ) on joukon {s r 0 +t r 1 s, t Z} pienin positiivinen luku. Erityisesti siis on olemassa s, t Z siten, että syt(r 0, r 1 ) = s r 0 + t r 1. (Tämä yhtälö tunnetaan Bézout n yhtälönä.) 4 Todistus. Tuloksen pitäisi olla tuttu Lukuteorian alkeet -kurssilta [15]. Esimerkki 1.4. Eukleideen algoritmi luvuille 126 ja 35: 126 = 3 35 + 21, 35 = 1 21 + 14, 21 = 1 14 + 7, 14 = 2 7. Kertoimet s ja t löydetään takaperin laskemalla : syt(126, 35) = 7 = 21 1 14, = 21 (35 1 21), = (126 3 35) (35 (126 3 35)), = 2 126 7 35. Tämä menetelmä kertoimien määräämiseksi ei ole kuitenkaan kovin käyttökelpoinen tietokoneella laskettaessa, päinvastoin; Eukleideen algoritmista saatavat välivaiheet pitäisi tallettaa muistiin, jotta niitä voitaisiin käyttää kertoimien s ja t määräämiseen edellisen esimerkin mukaisesti. Kertoimet s ja t voidaan kuitenkin määrätä suoraan käyttämällä ns. laajennettua Eukleideen algoritmia. 7 Vanhemmassa kirjallisuudessa luvun x lattialle käytetään merkintää [x].
1.4. Laajennettu Eukleideen algoritmi. Olkoot luvut l, q i ja r i kuten Eukleideen algoritmissa (1.1). Pyritään etsimään luvut s i ja t i siten, että s i r 0 + t i r 1 = r i kaikille 0 i l. Oletetaan aluksi, että tällaiset luvut ovat olemassa. Kun tätä oletusta sovelletaan indekseihin i 1, i ja i + 1, saadaan Eukleideen algoritmin avulla (1.2) r i+1 = r i 1 q i r i = (s i 1 r 0 + t i 1 r 1 ) q i (s i r 0 + t i r 1 ) = (s i 1 q i s i ) r 0 + (t i 1 q i t i ) r 1. Toisaalta r i+1 = s i+1 r 0 + t i+1 r 1. Valitaan kertoimet seuraavan palautuskaavan mukaisesti { si+1 = s i 1 q i s i, (1.3) t i+1 = t i 1 q i t i. Tällöin yhtälöstä (1.2) seuraa, että jos s k r 0 + t k r 1 = r k arvoilla k = i 1 ja k = i ja kertoimet s k ja t k on määrätty palautuskaavojen (1.3) avulla, niin yhtälö s k r 0 +t k r 1 = r k on voimassa myös, kun k = i + 1. Riittää siis löytää sopivat aloitusarvot. Tällaiset ovat s 0 = 1, t 0 = 0, s 1 = 0, t 1 = 1. Laajennetussa Eukleideen algoritmissa määrätään luvut l, q i, r i N, s i, t i Z, 1 i l, siten, että 0 r i 1 < r i, kun 1 i l, ja s 0 = 1, t 0 = 0 (1.4) s 1 = 0, t 1 = 1 r i 1 = q i r i + r i+1 s i 1 = q i s i + s i+1 t i 1 = q i t i + t i+1 Tällöin s i r 0 + t i r 1 = r i kaikille 0 i l ja r l = syt(r 0, r 1 ). Lisätietoa laajennetusta Eukleideen algoritmista löytyy kirjoista [2, 3.2], [7, 4.5.2]. Esimerkki 1.5. Käydään läpi edellisen esimerkin lasku laajennetulla Eukleideen algoritmilla. Riveillä i = 0 ja i = l + 1 oleville suureille q i ei ole määritelty arvoa ja ne on merkitty viivalla: i r i q i s i t i 0 126 1 0 1 35 3 0 1 2 21 1 1 3 3 14 1 1 4 4 7 2 2 7 5 0 5 18 Riviltä i = 4 saadaan r l = syt(r 0, r 1 ) = s l r 0 + t l r 1, eli 7 = syt(126, 35) = 2 126 7 35. Joissakin yksinkertaistetuissa esityksissä saatetaan sanoa, että kahden luvun suurin yhteinen tekijä määrätään jakamalla luvut alkutekijöihin ja poimimalla näistä yhteiset tekijät. Käytännössä näin voi menetellä kuitenkin vain (pienen) pienten lukujen kohdalla, koska suurille luvuille ei tunneta yhtään nopeaa tekijöihinjakomenetelmää. Eukleideen algoritmi on nopea. Seuraava lause kertoo kvantitatiivisesti, kuinka nopeasti suurin yhteinen tekijä voidaan löytää. 5
Lause 1.6. Olkoot r 0, r 1 Z, 0 < r 1 < r 0, ja l Eukleideen algoritmin (1.1) rivien lukumäärä. Tällöin l log r 1 + 1, missä φ := 1+ 5. log φ 2 Todistus. Voidaan olettaa, että r l = syt(r 0, r 1 ) = 1. Nimittäin, jos Eukleideen algoritmin (1.1) rivit kerrotaan puolittain positiivisella kokonaisluvulla c, nähdään että lukupariin (c r 0, c r 1 ) liittyvät Eukleideen algoritmin jakojäännökset ovat luvut c r i. Siis syt(c r 0, c r 1 ) = c syt(r 0, r 1 ) ja kummankin lukuparin, (c r 0, c r 1 ) ja (r 0, r 1 ), Eukleideen algoritmissa on täsmälleen yhtä monta riviä. Jos olisi r l > 1, voitaisiin lukuparin (r 0, r 1 ) suuurin yhteinen tekijä laskea lukuparin (r 0 /r l, r 1 /r l ) avulla niin, että Eukleideen algoritmin rivien lukumäärä ei muutu. Olkoon siis r l = 1. Osoitetaan induktiolla, että (1.5) r i φ l i, kun 0 i l. Tästä epäyhtälöstä saadaan erityisesti r 1 φ l 1, joten ottamalla puolittain logaritmit saadaan Väitetty epäyhtälö seuraa tästä. log r 1 (l 1) log φ. Epäyhtälön (1.5) todistus: Kun i = l, on r l = 1 = φ 0. Epäyhtälö (1.5) on siis voimassa ainakin, kun i = l. Ennenkuin jatketaan, todetaan että Eukleideen algoritmin (1.1) osamäärille q i on voimassa q i 1, kun 1 i l 1, ja q l 2. Nimittäin, Eukleideen algoritmin (1.1) nojalla r i 1 = q i r i + r i+1, ja koska r i+1 < r i < r i 1, on oltava q i 0. Jos olisi q l = 1, saataisiin Eukleideen algoritmin (1.1) viimeiseltä riviltä r l 1 = r l, mikä ei ole mahdollista. Siis q l 2. Koska 5 < 9, on φ < 1+ 9 2 = 2, joten edellisen nojalla saadaan r l 1 = q l r l = q l 2 > φ. Olkoon nyt 0 k l 2, ja oletetaan, että väitetty epäyhtälö (1.5) on tosi kaikille indekseille i > k. Koska q k+1 1, saadaan induktio-oletuksen nojalla r k = q k+1 r k+1 + r k+2 r k+1 + r k+2 ( φ l (k+1) + φ l (k+2) = φ l (k+1) 1 + 1 ) = φ l k. φ Siis epäyhtälö (1.5) on tosi myös indeksille i = k. Huomautuksia 1.7. a) Voidaan osoittaa, että Eukleideen algoritmille (1.1) hitain tapaus, siis sellainen jossa tarvitaan eniten rivejä, on Fibonaccin luvuista F n saatava aloitus. Asetetaan F 0 := 0, F 1 := 1 ja F n := F n 1 + F n 2, kun n 2. Tällöin luvuille r 0 := F n+2 ja r 1 := F n+1 Eukleideen algoritmissa (1.1) on l = n riviä. Ks. [7, 4.5.3, Thm. F]. b) Eukleideen algoritmi kahden luvun suurimman yhteisen tekijän määrämiseksi on nopea, koska logaritmi kasvaa hyvin hitaasti. Esimerkiksi, jos r 1 = 10 100 (=googol), Eukleideen algoritmissa tarvitaan enintään 479 riviä (eli jakoyhtälöä). 6
1.5. Modulaariaritmetiikkaa. Olkoon n Z, n 2. Sanotaan, että luvut a Z ja b Z ja ovat kongruentteja keskenään modulo n, jos a b on jaollinen luvulla n; tällöin merkitään a b mod n. Luku n on kongruenssin moduli. 8 Lukujen kongruenssi on ekvivalenssirelaatio, t.s. kaikille kokonaisluvuille a, b, c on voimassa a) a a mod n (refleksiivisyys); b) jos a b mod n, niin b a mod n (symmetrisyys); c) jos a b mod n ja b c mod n, niin a c mod n (transitiivisuus). Ekvivalenssirelaation avulla tarkasteltavat alkiot jaetaan ekvivalenssiluokkiin. Kongruenssirelaation tapauksessa luvun a määräämä ekvivalenssiluokka on joukko [a] n := {b Z b a mod n}. Joukkoa [a] n kutsutaan (luvun a määräämäksi) jäännösluokaksi modulo n. Kaikkien jäännösluokkien modulo n joukkoa merkitään Z n tai Z/nZ. Koska b a mod n, jos ja vain jos b a = k n jollekin k Z, on [a] n = {..., a 2 n, a n, a, a + n, a + 2 n,...}. Ekvalenssirelaatioiden yleisten omaisuuksien nojalla luvuille a ja b on [a] n = [b] n, jos ja vain jos a b mod n. Kun jakoyhtälössä jakajaksi valitaan luku n, saadaan a = q n + r, missä q, r Z ja 0 r < n. Siis r = rem(a, n) ja a r mod n, joten [a] n = [r] n = [rem(a, n)] n. Jokaiselle jäännösluokalle [a] n löytyy siis yksi ja vain yksi edustaja r, jolle on voimassa 0 r < n. Kokonaislukujen kongruenssille on voimasssa seuraavat laskusäännöt: Olkoot a, a, b, b Z. Tällöin (i) jos a b mod n ja a b mod n, niin a + a b + b mod n; (ii) jos a b mod n ja a b mod n, niin a a b b mod n. Edellisen nojalla jäännösluokille voidaan määritellä yhteen- ja kertolasku asettamalla [a] n + [a ] n := [a + a ] n, [a] n [a ] n := [a a ] n. Näin määritellyille laskutoimituksille on voimasssa: (i) [a] n + [b] n = [b] n + [a] n (yhteenlaskun kommutatiivisuus) (ii) ([a] n + [b] n ) + [c] n = [a] n + ([b] n + [c] n ) (yhteenlaskun assosiatiivisuus) (iii) [a] n [b] n = [b] n [a] n (kertolaskun kommutatiivisuus) (iv) ([a] n [b] n ) [c] n = [a] n ([b] n [c] n ) (kertolaskun assosiatiivisuus) (v) ([a] n + [b] n ) [c] n = [a] n [c] n + [b] n [c] n (distribuutiivisuus) Lisäksi a) yhteenlaskulle on olemassa neutraalialkio (nolla-alkio) [0] n, jolle [a] n +[0] n = [a] n kaikille [a] n Z n ; b) yhteenlaskussa jokaisella [a] n Z n on vasta-alkio [ a] n, jolle [a] n + [ a] n = [0] n ; c) kertolaskulle on olemassa neutraalialkio (ykkösalkio) [1] n, jolle [a] n [1] n = [a] n kaikille [a] n Z n. 8 Merkinnän a b mod n sijasta kirjallisuudesta saattaa löytää myös merkinnät a b (mod n) ja a b (n). 7
Sen sijaan kertolaskussa kaikilla alkioilla [a] n Z n ei välttämättä ole käänteisalkiota [b] n, jolle olisi [a] n [b] n = [1] n. Esimerkiksi, jos n = 4 ja a = 2, on [2] 4 [0] 4 = [0] 4 [1] 4. [2] 4 [1] 4 = [2] 4 [1] 4. [2] 4 [2] 4 = [4] 4 = [0] 4 [1] 4 ja [2] 4 [3] 4 = [6] 4 [2] 4 [1] 4. Sanotaan, että alkio [a] n Z n on kääntyvä, jos on olemassa alkio [b] n Z n siten, että [a] n [b] n = [1] n. Jos tällainen alkio [b] n on olemassa, sitä sanotaan alkion [a] n käänteisalkioksi ja merkitään [a] 1 n. Sanotaan myös, että kokonaisluku a on kääntyvä modulo n, jos alkio [a] n Z n on kääntyvä, t.s. jos on olemassa kokonaisluku b siten, että a b 1 mod n. Laajennetun Eukleideen algoritmin avulla voidaan todistaa seuraava tärkeä Lause 1.8. Alkio [a] n Z n on kääntyvä, jos ja vain jos syt(a, n) = 1. Jos syt(a, n) = 1, alkion [a] n käänteisalkio löydetään laajennetun Eukleideen algoritmin avulla. Todistus. Oletetaan aluksi, että [a] n on kääntyvä. Tällöin on olemassa [b] n Z n siten, että [a] n [b] n = [1] n. Jäännösluokkien edustajille a ja b tämä tarkoittaa, että a b 1 mod n, joten a b = 1 + k n jollekin kokonaisluvulle k. Olkoon s := syt(a, n). Tällöin s a ja s n, joten s (a b k n). Siis s 1, joten s = 1. Oletetaan kääntäen, että syt(a, n) = 1. Sovelletaan laajennettua Eukleideen algoritmia lukuihin r 0 = n ja r 1 = a. Algoritmin avulla löydetään luvut l, r i N, s i, t i Z, 1 i l, siten, että s i r 0 + t i r 1 = r i kaikille 0 i l ja r l = syt(r 0, r 1 ). Erityisesti on s l r 0 + t l r 1 = r l = syt(r 0, r 1 ), t.s. s l n + t l a = 1. Tästä seuraa, että t l a 1 mod n, joten alkio [t l ] n on alkion [a] n käänteisalkio. 8