1   while m ≠ 0 do
2       k := n mod m
3       n := m
4       m := k
I = J(I div J) + I mod J
0 ≤ I mod J < | J|

Teh­tä­vä:
Suu­rim­man yh­tei­sen te­ki­jän al­go­rit­mi

Ly­hyt Math­Check-oh­je (uu­teen vä­li­leh­teen)

Täs­sä teh­tä­väs­sä tar­kas­tel­laan kuu­lui­san Euk­lei­deen al­go­rit­min ny­ky­ver­sio­ta. Se löy­tää te­hok­kaas­ti kah­den luon­nol­li­sen lu­vun suu­rim­man yh­tei­sen te­ki­jän. Luon­nol­li­set lu­vut ovat ℕ = {0, 1, 2, …}. Täs­sä teh­tä­väs­sä kaik­ki lu­vut ovat luon­nol­li­sia lu­ku­ja.

SYT-al­go­rit­min toi­min­ta tu­tuk­si

Te­ki­jän mää­ri­tel­mä on seu­raa­va.

Mää­ri­tel­mä 1 Luon­nol­li­nen lu­ku h on luon­nol­li­sen lu­vun I te­ki­jä jos ja vain jos on ole­mas­sa sel­lai­nen luon­nol­li­nen lu­ku i, et­tä I = hi.

Lu­vul­la 15 on nel­jä te­ki­jää. Luet­te­le ne pie­nim­mäs­tä al­kaen.
tai

Lu­vul­la 25 on kol­me te­ki­jää. Luet­te­le ne pie­nim­mäs­tä al­kaen.
tai

Mää­ri­tel­mä 2 Luon­nol­li­nen lu­ku s on luon­nol­lis­ten lu­ku­jen n ja m suu­rin yh­tei­nen te­ki­jä jos ja vain jos s on n:n ja m:n te­ki­jä, ei­kä mi­kään suu­rem­pi luon­nol­li­nen lu­ku ole se­kä n:n et­tä m:n te­ki­jä.

Mi­kä on 15:n ja 25:n suu­rin yh­tei­nen te­ki­jä?
tai

SYT-al­go­rit­mi kä­sit­te­lee kah­ta lu­kua n ja m si­ten, et­tä jo­kai­sel­la kier­rok­sel­la n:n pai­kal­le tu­lee m ja m:n pai­kal­le tu­lee n mod m, kun­nes m = 0. Esi­merk­ki:

nm las­ku­toi­mi­tus
4970 49 mod 70 = 49
7049 70 mod 49 = 21
4921 49 mod 21 = 7
21 7 21 mod 7 = 0
7 0lo­pe­tus

Si­nun vuo­ro­si las­kea esi­merk­ki:

nm
6042
tai

SYT-al­go­rit­mi voi­daan esit­tää pseu­do­koo­di­na seu­raa­vas­ti:

1   while m ≠ 0 do
2       k := n mod m
3       n := m
4       m := k

Mis­tä muut­tu­jas­ta vas­taus löy­tyy, kun SYT-al­go­rit­mi on lo­pet­ta­nut? Va­lit­se oi­kea vaih­toeh­to. Voit vaik­ka ko­keil­la vaih­toeh­to­ja yk­si ker­ral­laan.

En­kä va­lit­se!
ei mis­tään
m
n
k
tai

Kuin­ka mo­nen kier­rok­sen jäl­keen SYT-al­go­rit­mi lo­pet­taa, kun aluk­si
n = 60 ja m = 0?   tai
n = 60 ja m = 15? tai
n = 60 ja m = 13? tai

Ol­koon aluk­si m = 6. An­na mah­dol­li­sim­man pie­ni sel­lai­nen n, et­tä SYT-al­go­rit­mi lo­pet­taa ta­san i kier­rok­sen jäl­keen. Vih­jePää­set hy­vään al­kuun ko­kei­le­mal­la n = 0, n = 1 ja niin edel­leen.
i = 1 tai
i = 2 tai
i = 3 tai

Kos­ka 0 = 7 ⋅ 0 ja 0 = 123 ⋅ 0, ovat se­kä 7 et­tä 123 nol­lan te­ki­jöi­tä. It­se asias­sa jo­kai­nen luon­nol­li­nen lu­ku on nol­lan te­ki­jä, sil­lä 0 = h ⋅ 0 pä­tee jo­kai­sel­la h. Sik­si, jos alus­sa n = m = 0, niin suu­rin­ta yh­teis­tä te­ki­jää ei ole ole­mas­sa.

Voi­daan hel­pos­ti to­dis­taa, et­tä päin­vas­tai­ses­sa ta­pauk­ses­sa suu­rin yh­tei­nen te­ki­jä on ole­mas­sa. ”Päin­vas­tai­nen ta­paus” tar­koit­taa, et­tä alus­sa tai . Lu­vuil­la n ja m on yh­tei­siä te­ki­jöi­tä, kos­ka ai­na­kin on sel­lai­nen. tai

Niil­lä on vain ra­jal­li­ses­ti yh­tei­siä te­ki­jöi­tä, mik­si? Mie­ti en­sin it­se, ja kat­so sit­ten opet­ta­jan se­li­tys täs­täJos n ≠ 0, niin mi­kään n:ää suu­rem­pi lu­ku ei ole n:n te­ki­jä. Sa­man­lai­nen väi­te pä­tee m:lle..

Apu­tu­lok­sia

Erääs­sä Muu­mi­peik­ko-piir­re­tys­sä Muu­mi­pap­pa sa­noi ”mam­ma, pi­dä ai­na kä­sil­lä kat­ti­lal­li­nen kie­hu­vaa vet­tä”. Kun rat­kai­set lu­ku­jen jaol­li­suut­ta kä­sit­te­le­viä teh­tä­viä, pi­dä ai­na kä­sil­lä ja­ko­yh­tä­lö. Täl­lä ker­taa kä­te­vin­tä on, jos se on kir­joi­tet­tu si­ten, et­tä ja­ka­ja­na on J ja jaet­ta­va­na I. Et­si ja­ko­yh­tä­lö jos­ta­kin ja lai­ta jo­hon­kin kä­te­vään paik­kaan. Jos hy­vin käy, niin si­tä ei tar­vit­se et­siä ko­vin kau­kaa.

Tu­lem­me tar­vit­se­maan vii­si apu­tu­los­ta. To­dis­tam­me ne täs­sä.

  1. Jos h on I:n te­ki­jä ja J:n te­ki­jä, niin h on myös lu­vun I + J te­ki­jä.

    Te­ki­jän mää­ri­tel­män mu­kaan on ole­mas­sa sel­lai­set lu­vut i ja j, et­tä I = hi ja J = hj. Pää­sem­me ta­voit­tee­seen löy­tä­mäl­lä sel­lai­sen lu­vun x, et­tä I + J = hx. Täl­lai­nen lu­ku löy­tyy hel­pol­la sie­ven­nyk­sel­lä:
    I + J = =
    tai
  2. Jos h on I:n te­ki­jä ja J:n te­ki­jä ja IJ, niin h on myös lu­vun I − J te­ki­jä.

    To­dis­tus on hy­vin sa­man­lai­nen kuin äs­ken. Help­po sie­ven­nys on seu­raa­va:
    = =
    tai
  3. Jos h on I:n te­ki­jä, niin h on myös lu­vun IJ te­ki­jä.

    = () = ()
    tai

    Nyt A-koh­das­sa mai­ni­tun x:n roo­lis­sa on
    tai
  4. Jos J ≠ 0 ja h on I:n ja J:n te­ki­jä, niin h on myös lu­vun I mod J te­ki­jä.

    Ja­ko­yh­tä­lön mu­kaan = + mod .
    tai

    Täs­tä saa­daan I mod J = , jo­ten väi­te seu­raa apu­tu­lok­sis­ta ja .
    tai

    Mi­tä toi­sen näis­tä apu­tu­lok­sis­ta käyt­tö edel­lyt­tää? Vas­tausB edel­lyt­tää IJ. Nyt I:n pai­kal­la on I ja J:n pai­kal­la on J(I div J), eli on ol­ta­va IJ(I div J). Mik­si se pä­tee? Vas­tausJa­ko­yh­tä­lön mu­kaan 0 ≤ I mod J < | J|, jo­ten I mod J ≥ 0. Kos­ka I mod J = IJ(I div J), saam­me IJ(I div J) ≥ 0 eli IJ(I div J).

  5. Jos J ≠ 0 ja h on lu­ku­jen J ja I mod J te­ki­jä, niin h on myös I:n te­ki­jä.

    I = + mod , jo­ten väi­te seu­raa apu­tu­lok­sis­ta ja .
    tai

SYT-al­go­rit­min oi­keel­li­suus

Täs­sä osas­sa osoi­tam­me, et­tä jos alus­sa n ≠ 0 tai m ≠ 0 niin SYT-al­go­rit­min vas­taus on oi­kea. Tär­kein­tä ei ole lop­pu­tu­los vaan päät­te­lyn har­joit­te­le­mi­nen, tai ai­na­kin päät­te­lyn ym­mär­tä­mi­sen har­joit­te­le­mi­nen. Ta­pauk­ses­sa n = m = 0 suu­rin­ta yh­teis­tä te­ki­jää ei ole ole­mas­sa, jo­ten jä­täm­me sen tut­ki­mat­ta.

Jot­ta al­ku­pe­räis­ten n:n ja m:n suu­rim­mas­ta yh­tei­ses­tä te­ki­jäs­tä oli­si hel­pom­pi pu­hua, an­nam­me sil­le ni­mek­si s. Ta­voit­teem­me on osoit­taa, et­tä n:n lo­pul­li­nen ar­vo on s.

Tar­vit­sem­me kä­sit­tei­tä sil­mu­kan eh­to ja sil­mu­kan var­ta­lo. SYT-al­go­rit­min sil­mu­kan eh­to on , ja var­ta­lo koos­tuu ri­veis­tä , ja .
tai

SYT-al­go­rit­mi koos­tuu yh­des­tä sil­mu­kas­ta. Käy­täm­me sil­mu­koi­den to­dis­ta­mi­ses­sa hy­vin yleis­tä päät­te­ly­ta­paa, jos­sa on vii­si vai­het­ta:

  1. Va­li­taan jo­kin väi­te, jol­la päät­te­ly saa­daan on­nis­tu­maan. Tä­mä saat­taa vaa­tia luo­vuut­ta. Va­lit­tua väi­tet­tä kut­su­taan in­va­rian­tik­si.
  2. Osoi­te­taan, et­tä in­va­riant­ti pä­tee sil­mu­kan alus­sa. Tä­mä on yleen­sä help­poa.
  3. Osoi­te­taan, et­tä sil­mu­kan var­ta­lon suo­ri­tus ei voi saa­da in­va­riant­tia pois voi­mas­ta pait­si kor­kein­taan ti­la­päi­ses­ti. Täs­mäl­li­sem­min sa­not­tu­na: osoi­te­taan, et­tä jos in­va­riant­ti pä­tee sil­mu­kan var­ta­lon alus­sa ja sil­mu­kan eh­to pä­tee, niin in­va­riant­ti pä­tee myös var­ta­lon lo­pus­sa (mut­ta saa ol­la pois voi­mas­ta kes­kel­lä var­ta­loa). Kos­ka sil­mu­kan var­ta­lo voi ol­la iso, tä­mä on usein työ­läs­tä, mut­ta täl­lä ker­taa ei ole.
  4. Osoi­te­taan, et­tä sil­mu­kan suo­ri­tus lop­puu jos­kus. Tä­mä on usein hy­vin help­poa, mut­ta jos­kus erit­täin vai­keaa.
  5. Osoi­te­taan, et­tä jos in­va­riant­ti pä­tee ja sil­mu­kan eh­to ei pä­de, niin sil­mu­kan lop­pu­tu­lok­sel­ta ha­lut­tu asia pä­tee. Tä­mä­kin on yleen­sä help­poa.

Tä­mä me­net­te­ly on pä­te­vä seu­raa­vas­ta syys­tä. Käy­täm­me SYT-al­go­rit­min ri­ve­jä esi­merk­ki­nä.

Käy­täm­me tä­tä me­ne­tel­mää to­dis­taak­sem­me, et­tä SYT-al­go­rit­min sil­muk­ka lo­pet­taa ja sil­loin n = s.

  1. Va­lit­sem­me in­va­rian­tik­si väit­teen ”s on n:n ja m:n suu­rin yh­tei­nen te­ki­jä”.
  2. Mie­ti en­sin it­se mik­si koh­ta 2 pä­tee, ja kat­so sit­ten opet­ta­jan se­li­tys täs­täPi­tää osoit­taa, et­tä kun ol­laan sil­mu­kan alus­sa, niin s on n:n ja m:n suu­rin yh­tei­nen te­ki­jä. Tä­mä seu­raa vä­lit­tö­mäs­ti sii­tä, min­kä mer­ki­tyk­sen an­noim­me ai­kai­sem­min sym­bo­lil­le s. Me­hän pää­tim­me, et­tä se on ni­mi al­ku­pe­räis­ten n:n ja m:n suu­rim­mal­le yh­tei­sel­le te­ki­jäl­le..
  3. Teh­tä­vä­nä on osoit­taa, et­tä jos ri­vin 2 alus­sa s on n:n ja m:n suu­rin yh­tei­nen te­ki­jä, niin myös ri­vin 4 lo­pus­sa s on n:n ja m:n suu­rin yh­tei­nen te­ki­jä. Apu­na saa käyt­tää tie­toa m ≠ 0.

    Jou­dum­me pu­hu­maan sa­mo­jen muut­tu­jien n ja m ar­vois­ta kah­des­sa eri koh­das­sa, ni­mit­täin ri­vin 2 alus­sa ja ri­vin 4 lo­pus­sa. Tä­mä hel­pot­tuu, kun pää­täm­me mer­ki­tä ar­vo­ja ri­vin 4 lo­pus­sa M:llä ja N:llä, ja käy­täm­me m:ää ja n:ää tar­koit­ta­maan vain ar­vo­ja ri­vin 2 alus­sa. Sil­loin ei me­ne se­kai­sin, kum­paa koh­taa tar­koi­tam­me. Ri­vien 2, 3 ja 4 vuok­si
    N = ja M = .
    tai

    Jo­kai­nen n:n ja m:n yh­tei­nen te­ki­jä on myös N:n te­ki­jä, kos­ka n:n ja m:n yh­tei­nen te­ki­jä on m:n te­ki­jä ja N = m.

    Jo­kai­nen n:n ja m:n yh­tei­nen te­ki­jä on myös M:n te­ki­jä, kos­ka M = n mod m ja edel­lä osoi­tet­tua väit­tä­mää D voi so­vel­taa niin, et­tä I:n pai­kal­la on ja J:n pai­kal­la on .
    tai

    Näis­tä yh­teen­sä seu­raa, et­tä n:n ja m:n suu­rin yh­tei­nen te­ki­jä on myös N:n ja M:n yh­tei­nen te­ki­jä. Vie­lä tar­vit­see osoit­taa, et­tä se on N:n ja M:n yh­tei­sis­tä te­ki­jöis­tä suu­rin. Teem­me sen osoit­ta­mal­la, et­tä jo­kai­nen N:n ja M:n yh­tei­nen te­ki­jä on myös n:n ja m:n te­ki­jä. Kun saam­me sen teh­tyä, on osoi­tet­tu, et­tä n:n ja m:n yh­tei­set te­ki­jät ovat sa­mat kuin N:n ja M:n yh­tei­set te­ki­jät, jol­loin toi­sen pa­rin suu­rin on myös toi­sen pa­rin suu­rin.

    Jo­kai­nen N:n ja M:n yh­tei­nen te­ki­jä on myös m:n te­ki­jä, kos­ka N:n ja M:n yh­tei­nen te­ki­jä on N:n te­ki­jä ja N = m.

    Jo­kai­nen N:n ja M:n yh­tei­nen te­ki­jä on myös n:n te­ki­jä, kos­ka Edel­lä osoi­tet­tu E an­taa väit­teen, kos­ka N = m ja M = n mod m.

    Tar­vit­tiin­ko tie­toa m ≠ 0 mi­hin­kään? Vas­tausKyl­lä. Apu­tu­lok­set D ja E vaa­ti­vat, et­tä J ≠ 0. Kos­ka J:n roo­lis­sa oli m, tar­vit­tiin m ≠ 0.

  4. Käy­täm­me kir­jai­mia m ja M ku­ten koh­das­sa 3. Nii­hin voi­daan so­vel­taa ja­ko­yh­tä­lön suu­ruus­ver­tai­lu­osaa. Kir­joi­ta niin syn­ty­vä suu­ruus­ver­tai­lu. .
    tai

    Se tar­koit­taa, et­tä m:n ar­vo pie­ne­nee sil­mu­kan jo­kai­sel­la kier­rok­sel­la, kui­ten­kin py­syen vä­hin­tään nol­la­na. Kos­ka m:n ar­vo on luon­nol­li­nen lu­ku, se voi pie­nen­tyä enin­tään niin mon­ta ker­taa kuin m:n ar­vo oli SYT-al­go­rit­min suo­ri­tuk­sen alus­sa. Sil­muk­ka lo­pet­taa kier­ret­tyään kor­kein­taan niin mon­ta ker­taa.

  5. Pi­tää to­dis­taa, et­tä jos in­va­riant­ti pä­tee ja m ≠ 0 ei pä­de, niin n = s. Tä­mä on mel­ko help­poa.Kos­ka m ≠ 0 ei pä­de, pä­tee m = 0. Kos­ka in­va­riant­ti pä­tee, on s lu­ku­jen n ja 0 suu­rin yh­tei­nen te­ki­jä. Ei voi ol­la n = 0, kos­ka muu­toin n:llä ja nol­lal­la ei oli­si suu­rin­ta yh­teis­tä te­ki­jää, mi­kä oli­si vas­toin si­tä tie­toa, et­tä s on nii­den suu­rin yh­tei­nen te­ki­jä. Sik­si n ≠ 0. Sii­tä seu­raa, et­tä n on it­sen­sä suu­rin te­ki­jä. Kos­ka jo­kai­nen luon­nol­li­nen lu­ku on nol­lan te­ki­jä, on n nol­lan te­ki­jä. Niin­pä lu­ku­jen n ja 0 suu­rin yh­tei­nen te­ki­jä on n. Sik­si s = n.

Euk­lei­deen ver­sio

Euk­lei­deen ver­sio oli täl­lai­nen:

while m ≠ 0 do
    k := maksimi(n, m)
    n := minimi(n, m)
    m := k − n

Siis mo­du­lo-ope­raa­tio oli kor­vat­tu sil­lä, et­tä suu­rem­mas­ta vä­hen­net­tiin pie­nem­pi.

Mi­ten se käyt­täy­tyy, kun aluk­si n = 49 ja m = 70?

nm
4970
tai

Mi­ten se käyt­täy­tyy, kun aluk­si n = 1000 ja m = 1? Tut­kim­me vain jon­kin mat­kaa al­kua.

nm
10001
tai

Kuin­ka mon­ta kier­ros­ta tar­vi­taan, kun n = 1000 ja m = 1?
tai

Kuin­ka mon­ta kier­ros­ta mo­der­ni SYT-al­go­rit­mi tar­vit­see, kun n = 1000 ja m = 1?
tai

Mo­der­ni SYT-al­go­rit­mi on kor­van­nut Euk­lei­deen ver­sion, kos­ka …

Mi­ni­min ja mak­si­min las­ke­mi­nen tie­to­ko­neel­la on hi­das­ta.
Ny­kyih­mi­set ei­vät ar­vos­ta an­tii­kin kreik­ka­lais­ten saa­vu­tuk­sia.
Mo­der­ni SYT-al­go­rit­mi on isoil­la lu­vuil­la pal­jon no­peam­pi.
En vas­taa tä­hän!
tai

Euk­lei­deen ver­sio toi­mii joil­la­kin syöt­teil­lä no­peas­ti (ko­kei­le vaik­ka m = n = 1000), mut­ta on ole­mas­sa lo­put­to­mas­ti syöt­tei­tä, joil­la se toi­mii hi­taas­ti (esi­mer­kik­si ai­na kun n on iso ja m = 1). Mo­der­ni SYT-al­go­rit­mi ei ole mil­lään syöt­teel­lä to­del­la hi­das. Sen no­peu­den tut­ki­mi­nen on oman teh­tä­vän­sä ar­voi­nen asia.