Määritelmä 1
Luonnollinen luku h on luonnollisen luvun Itekijä jos
ja vain jos on olemassa sellainen luonnollinen luku i, että I =
hi.
Määritelmä 2
Luonnollinen luku s on luonnollisten lukujen n ja msuurin yhteinen tekijä jos ja vain jos s on n:n ja
m:n tekijä, eikä mikään suurempi luonnollinen luku ole sekä n:n
että m:n tekijä.
Koska 0 = 7 ⋅ 0 ja 0 = 123 ⋅ 0, ovat sekä 7 että 123 nollan tekijöitä.
Itse asiassa jokainen luonnollinen luku on nollan tekijä, sillä 0 =
h ⋅ 0 pätee jokaisella h.
Siksi, jos alussa n = m = 0, niin suurinta yhteistä tekijää ei
ole olemassa.
Niillä on vain rajallisesti yhteisiä tekijöitä, miksi?
Mieti ensin itse, ja katso sitten opettajan selitys
tästäJos n ≠ 0, niin mikään
n:ää suurempi luku ei ole n:n tekijä.
Samanlainen väite pätee m:lle..
Aputuloksia
Eräässä Muumipeikko-piirretyssä Muumipappa sanoi ”mamma, pidä aina käsillä
kattilallinen kiehuvaa vettä”.
Kun ratkaiset lukujen jaollisuutta käsitteleviä tehtäviä, pidä aina käsillä
jakoyhtälö.
Tällä kertaa kätevintä on, jos se on kirjoitettu siten, että jakajana on
J ja jaettavana I.
Etsi jakoyhtälö jostakin ja laita johonkin kätevään paikkaan.
Jos hyvin käy, niin sitä ei tarvitse etsiä kovin kaukaa.
Tulemme tarvitsemaan viisi aputulosta.
Todistamme ne tässä.
Jos h on I:n tekijä ja J:n tekijä, niin h on
myös luvun I + J tekijä.
Jos h on I:n tekijä ja J:n tekijä ja I ≥
J, niin h on myös luvun I − J tekijä.
Jos h on I:n tekijä, niin h on myös luvun IJ
tekijä.
Jos J ≠ 0 ja h on I:n ja J:n tekijä, niin
h on myös luvun I mod J tekijä.
Mitä toisen näistä aputuloksista käyttö edellyttää?
VastausB edellyttää I ≥ J.
Nyt I:n paikalla on I ja J:n paikalla on J(I div J), eli on
oltava I ≥ J(I div J).
Miksi se pätee?
VastausJakoyhtälön mukaan 0 ≤ I
mod J < | J|, joten I mod J ≥ 0.
Koska I mod J = I − J(I div J),
saamme I − J(I div J) ≥ 0 eli I ≥
J(I div J).
Jos J ≠ 0 ja h on lukujen J ja I mod J
tekijä, niin h on myös I:n tekijä.
SYT-algoritmin oikeellisuus
Tässä osassa osoitamme, että jos alussa n ≠ 0 tai m ≠ 0 niin
SYT-algoritmin vastaus on oikea.
Tärkeintä ei ole lopputulos vaan päättelyn harjoitteleminen, tai ainakin
päättelyn ymmärtämisen harjoitteleminen.
Tapauksessa n = m = 0 suurinta yhteistä tekijää ei ole olemassa,
joten jätämme sen tutkimatta.
Jotta alkuperäisten n:n ja m:n suurimmasta yhteisestä
tekijästä olisi helpompi puhua, annamme sille nimeksi s.
Tavoitteemme on osoittaa, että n:n lopullinen arvo on s.
Osoitetaan, että invariantti pätee silmukan alussa.
Tämä on yleensä helppoa.
Osoitetaan, että silmukan vartalon suoritus ei voi saada invarianttia pois
voimasta paitsi korkeintaan tilapäisesti.
Täsmällisemmin sanottuna: osoitetaan, että jos invariantti pätee silmukan
vartalon alussa ja silmukan ehto pätee, niin invariantti pätee myös vartalon
lopussa (mutta saa olla pois voimasta keskellä vartaloa).
Koska silmukan vartalo voi olla iso, tämä on usein työlästä, mutta tällä
kertaa ei ole.
Osoitetaan, että silmukan suoritus loppuu joskus.
Tämä on usein hyvin helppoa, mutta joskus erittäin vaikeaa.
Osoitetaan, että jos invariantti pätee ja silmukan ehto ei päde, niin
silmukan lopputulokselta haluttu asia pätee.
Tämäkin on yleensä helppoa.
Tämä menettely on pätevä seuraavasta syystä.
Käytämme SYT-algoritmin rivejä esimerkkinä.
Kohta 2 kertoo, että kun rivin 1 alussa ollaan ensimmäisen kerran
eli silmukkaa on kierretty nolla kierrosta, niin invariantti pätee.
Jos tällöin m = 0 niin SYT-algoritmi lopettaa.
Muussa tapauksessa suoritetaan silmukan vartalo siten, että invariantti päti
kun vartalon suoritus alkoi.
Kohta 3 kertoo, että invariantti pätee myös rivin 4 lopussa.
Rivin 4 lopusta joudutaan uudelleen rivin 1 alkuun, joten kun rivin 1 alussa
ollaan toisen kerran, niin invariantti pätee.
Jos tällöin m = 0 niin SYT-algoritmi lopettaa.
Muussa tapauksessa suoritetaan silmukan vartalo siten, että invariantti päti
kun vartalon suoritus alkoi.
Kohta 3 kertoo, että invariantti pätee myös rivin 4 lopussa.
Rivin 4 lopusta joudutaan uudelleen rivin 1 alkuun, joten kun rivin 1 alussa
ollaan kolmannen kerran, niin invariantti pätee.
Samalla tavalla voidaan päätellä, että kun rivin 1 alussa ollaan
neljännen, viidennen, kuudennen jne. kerran, niin
invariantti pätee.
Siis invariantti pätee aina kun suoritus on rivin 1 alussa.
Käytämme tätä menetelmää todistaaksemme, että SYT-algoritmin silmukka
lopettaa ja silloin n = s.
Valitsemme invariantiksi väitteen ”s on n:n ja m:n
suurin yhteinen tekijä”.
Mieti ensin itse miksi kohta 2 pätee, ja katso sitten opettajan selitys tästäPitää osoittaa, että kun ollaan
silmukan alussa, niin s on n:n ja m:n suurin yhteinen
tekijä.
Tämä seuraa välittömästi siitä, minkä merkityksen annoimme aikaisemmin
symbolille s.
Mehän päätimme, että se on nimi alkuperäisten n:n ja m:n
suurimmalle yhteiselle tekijälle..
Tehtävänä on osoittaa, että jos rivin 2 alussa s on n:n ja
m:n suurin yhteinen tekijä, niin myös rivin 4 lopussa s on
n:n ja m:n suurin yhteinen tekijä.
Apuna saa käyttää tietoa m ≠ 0.
Jokainen n:n ja m:n yhteinen tekijä on myös N:n tekijä,
koska …n:n ja m:n
yhteinen tekijä on m:n tekijä ja N = m.
Näistä yhteensä seuraa, että n:n ja m:n suurin yhteinen
tekijä on myös N:n ja M:n yhteinen tekijä.
Vielä tarvitsee osoittaa, että se on N:n ja M:n yhteisistä
tekijöistä suurin.
Teemme sen osoittamalla, että jokainen N:n ja M:n yhteinen
tekijä on myös n:n ja m:n tekijä.
Kun saamme sen tehtyä, on osoitettu, että n:n ja m:n yhteiset
tekijät ovat samat kuin N:n ja M:n yhteiset tekijät, jolloin
toisen parin suurin on myös toisen parin suurin.
Jokainen N:n ja M:n yhteinen tekijä on myös m:n tekijä,
koska …N:n ja M:n
yhteinen tekijä on N:n tekijä ja N = m.
Jokainen N:n ja M:n yhteinen tekijä on myös n:n tekijä,
koska …Edellä osoitettu E antaa
väitteen, koska N = m ja M = n mod
m.
Tarvittiinko tietoa m ≠ 0 mihinkään?
VastausKyllä.
Aputulokset D ja E vaativat, että J ≠ 0.
Koska J:n roolissa oli m, tarvittiin m ≠ 0.
Se tarkoittaa, että m:n arvo pienenee silmukan jokaisella
kierroksella, kuitenkin pysyen vähintään nollana.
Koska m:n arvo on luonnollinen luku, se voi pienentyä enintään niin
monta kertaa kuin m:n arvo oli SYT-algoritmin suorituksen alussa.
Silmukka lopettaa kierrettyään korkeintaan niin monta kertaa.
Pitää todistaa, että jos invariantti pätee ja m ≠ 0 ei päde, niin
n = s.
Tämä on melko helppoa.Koska m ≠
0 ei päde, pätee m = 0.
Koska invariantti pätee, on s lukujen n ja 0 suurin yhteinen
tekijä.
Ei voi olla n = 0, koska muutoin n:llä ja nollalla ei olisi
suurinta yhteistä tekijää, mikä olisi vastoin sitä tietoa, että s on
niiden suurin yhteinen tekijä.
Siksi n ≠ 0.
Siitä seuraa, että n on itsensä suurin tekijä.
Koska jokainen luonnollinen luku on nollan tekijä, on n nollan tekijä.
Niinpä lukujen n ja 0 suurin yhteinen tekijä on n.
Siksi s = n.
Eukleideen versio
Eukleideen versio oli tällainen:
whilem ≠ 0 do k := maksimi(n, m) n := minimi(n, m) m := k − n
Siis modulo-operaatio oli korvattu sillä, että suuremmasta vähennettiin
pienempi.
Miten se käyttäytyy, kun aluksi n = 49 ja m = 70?
Miten se käyttäytyy, kun aluksi n = 1000 ja m = 1?
Tutkimme vain jonkin matkaa alkua.
Eukleideen versio toimii joillakin syötteillä nopeasti (kokeile vaikka
m = n = 1000), mutta on olemassa loputtomasti syötteitä, joilla
se toimii hitaasti (esimerkiksi aina kun n on iso ja m = 1).
Moderni SYT-algoritmi ei ole millään syötteellä todella hidas.
Sen nopeuden tutkiminen on oman
tehtävänsä arvoinen asia.