*Ak máte akékoľvek otázky ohľadom tejto úlohy, napíšte Baške na
*
“Dášenka, pamätáš si ako som ťa učil počítať?”, pýta sa ocko Bob.
“Áno. Nula, jeden, dva, tri, štyri až po veeeeľmi veľa.”, odpovedá malá Dáša s úsmevom.
“Tak dnes ti ukážem hru, ktorú sa s tými číslami môžeš hrať.”
“Jéj, ďalšia hra. Aké sú pravidlá?”
“Každé ráno odo mňa dostaneš dve rovnaké nenulové čísla. Potom si vezmeš túto mincu, a budeš si ňou hádzať. Vždy keď hodíš hlavu, pripočítaš prvé číslo k druhému a na papier si zaznačíš H. Keď hodíš znak, tak pripočítaš druhé číslo k prvému a na papier si zaznačíš Z.”
“Môžeš mi to ukázať na príklade?”
“Samozrejme. Začnem napríklad s dvoma štvorkami. Povedzme že som hodil postupne znak, hlava, znak a znak. Aké budú výsledné čísla?”
Dášenka sa zamyslela, zobrala si papier a začala sčítavať. Nakoniec vyhlásila: “Tridsať dva a dvanásť!”.
Bob si pozrel jej papier a našiel tam nasledovnú tabuľku:
| Hody | Z | H | Z | Z | |
|---|---|---|---|---|---|
| Prvé | 4 | 8 | 8 | 20 | 32 |
| Druhé | 4 | 4 | 12 | 12 | 12 |
“Správne. Na konci dňa mi potom donesieš ukázať aj postupnosť znakov, aj výslednú dvojicu čísel, dobre?”
To ho už ale Dášenka poriadne nepočúvala. Začala si mincu hádzať a pokračovala sčítavaním 32 a 12.
“Ešte jedna vec, kým dávaš pozor. Aby si sa neupísala do zbláznenia, tak ak hodíš viacero rovnakých znakov za sebou, tak stačí ak napíšeš číslo, koľkokrát to bolo, a písmenko Z alebo H. Teda náš príklad by sa dal zapísať ako 1Z,1H,2Z. Dobre?”
“Áno oci.” a už jej nebolo.
Na druhé ráno dostala Dášenka od Boba dve rovnaké čísla a celý deň si hádzala mincou.
Avšak večer prišla za svojím ockom celá nešťastná, lebo stratila všetky svoje výpočty, a s nimi aj začiatočné dve čísla a postupnosť hodov. Jediné čo jej ostalo boli výsledné dve čísla.
Nanešťastie si ani Bob už nepamätá čísla, ktoré jej ráno zadal. Obrátil sa preto na vás:
“Ahojte PRASKáči. Vedeli by ste z posledných dvoch čísel zistiť, ktoré čísla som zadal ráno Dášenke a ako vyzerala celá postupnosť hodov? Alebo to už nejde?”
Tak si to zhrňme. Na začiatku máme čísla $p$ a $d$, ktoré sú rovnaké a kladné. Postupne s nimi robíme operácie dvoch typov:
Z: pripočítame $d$ ku $p$, takže vznikne dvojica čísel $p+d$ a $d$
H: pripočítame $p$ ku $d$, takže vznikne dvojica čísel $p$ a $d+p$
Potom, ako sme spravili niekoľko takýchto operácií, sme získali nejaké dve čísla $P$ a $D$. V prvých troch podúlohách je vašou úlohou zistiť (ak je to možné) začiatočnú hodnotu čísel $p$ a $d$. Okrem toho zistite aj postupnosť hodov mince v skrátenom formáte.
Skrátený formát je postupnosť dvojíc: číslo a písmenko (Z alebo H). Číslo je vždy kladné väčšie ako nula, a hovorí koľkokrát po sebe Dášenka hodila konkrétnu stranu mince. V rámci tejto skrátenej postupnsoti sa vždy strieda hlava a znak, takže nemôže nastať napríklad takýto prípad: $$3Z,5H,7Z,6Z,8H,1Z,5H$$ pretože by sme to vedeli skrátiť a prepísať $7Z,6Z$ na $13Z$.
Táto úloha sa skladá z niekoľkých podúloh:
(2 body) Dášenka doniesla Bobovi čísla $P=15$ a $D=35$. Viete zistiť postupnosť hodov a hodnotu čísel $p$ a $d$, ktoré ráno od Boba dostala? Poprípade vysvetlite Bobovi, že sa to už zistiť nedá.
(2 body) Ak by Dášenka doniesla Bovovi čísla $P=111$ a $D=9$, vedeli by ste zistiť postupnosť hodov a hodnotu počiatočných čísel $p$ a $d$?
(5 body) Vedeli by ste riešiť takýto problém pre ľubovoľnú dvojicu čísel $P$ a $D$? Popíšte postup, ktorý z dvoch čísel $P$ a $D$ zistí počiatočné čísla $p$ a $d$ a tiež skonštruuje skrátenú postupnosť hodov.
Snažte sa, aby bol váš postup dostatočne rýchly. Vzorové riešenie by vedelo len s pomocou papiera a pera vypočítať výsledok aj pre čísla $1\,000\,000$ a $14$, poprípade pre ľubovoľnú dvojicu čísel veľkých až milión.
(3 body) Vedeli by ste dokázať, že počiatočné číslo $p$ delí obe konečné čísla $P$ a $D$?
(3 body) Vedeli by ste dokázať, že ak nejaké číslo $x$ delí obe výsledné čísla $P$ a $D$, tak delí aj pôvodné číslo $p$?
Čo vyplýva z vlastností d) a e) o čísle $p$?
Pripomeňme si, že ráno dostala Dášenka dve rovnaké čísla $p$ a $d$, ktoré sú väčšie ako nula. Následne niekoľkokrát hodila mincou a podľa toho, čo jej padlo spravila jednu z nasledovných operácií.
Z (znak): pripočítame $d$ ku $p$, takže vznikne dvojica čísel $p+d$ a $d$
H (hlava): pripočítame $p$ ku $d$, takže vznikne dvojica čísel $p$ a $d+p$
Na konci dňa mala Dáša dvojicu čísel $P$ a $D$. Našou úlohou bolo z týchto čísel zistiť, s akou hodnotou $p$ začínala a tiež prísť na to, čo jej padalo na minci.
Na začiatok urobme niekoľko užitočných pozorovaní:
Obe čísla $p, d$ sú ráno väčšie ako nula a operácie $Z$ a $H$ k nim hodnoty pričítavajú. No a súčet dvoch kladných čísel môže byť iba kladný.
Predstavme si, že v nejakom momente má Dášenka čísla $P’$ a $D’$. Po ďalšom hode bude mať čísla $P’+D’$ a $D’$ (resp. $P’$ a $D’+P’$). Ak by sa ale tieto dve čísla rovnali, tak platí $P’+D’ = D’$ (resp. $P’ = D’+P’$), čo znamená, že $P’ = 0$ (resp. $D’ = 0$). Podľa predchádzajúceho pozorovania sa však niečo také nemôže stať.
Dášenka doniesla Bobovi čísla $P=15$ a $D=35$.
Ako zistíme začiatočné čísla a postupnosť hodov? Najlepšie by bolo odsimulovať Dášenkino hádzanie, nevieme však, kde začať. Mohli by sme teda vyskúsať všetky možné začiatočné hodnoty $p$. Tých je iba 15. Uvedomme si totiž, že platí $p \leq P = 15$ a $p \leq D = 35$. Nepoznáme však ani postupnosť hodov, museli by sme vyskúšať všetky možnosti toho, čo mohla Dáša hodiť.
Skúšať všetky možnosti hodov je naozaj náročné a počet možností stúpa veľmi rýchlo s rastúcim počtom hodov. V prvom kroku mohla hodiť buď $H$ alebo $Z$. To sú dve možnosti. V druhom kroku síce platí to isté, ale už musíme rátať s tým, čo padlo v prvom kroku, takže máme štyri možnosti: $ZZ, ZH, HZ, HH$. Pri troch hodoch je tých možností opäť dvakrát viac, lebo pre každú z postupností pre dva hody máme dve možnosti čo mohlo padnúť ďalšie: $ZZ\pmb{Z}, ZZ\pmb{H}, ZH\pmb{Z}, ZH\pmb{H}, HZ\pmb{Z}, HZ\pmb{H}, HH\pmb{Z}, HH\pmb{H}$. Každým hodom sa počet možností, ktoré musíme vyskúšať, zdvojnásobí. Už pre 10 hodov musíme vyskúšať viac ako $1\,000$ možností, preto to nevyzerá ako správny postup.
Skúsme sa teda na to pozrieť zozadu. Pri tomto postupe aspoň poznáme výsledné hodnoty $P$ a $D$. Čísla, ktoré mala Dášenka pred posledným hodom si označme $P’$ a $D’$, ich hodnotu zatiaľ nepoznáme. Následne padla minca, čísla sa zmenili a dostali sme čísla $P$ a $D$. Posledný hod mohol byť $Z$ aj $H$, skúsme preto vyskúšať obe možnosti.
Ak čísla pred posledným hodom boli $P’$ a $D’$ a hodili sme $Z$, tak nové čísla musia byť $P’+D’$ a $D’$. Zároveň vieme, že nové čísla sú $P = 15$ a $D = 35$ (keďže to bol posledný hod), takže musí platiť:
$$P’+D’ = P = 15$$ $$D’ = D = 35$$
Z týchto rovníc vyplýva, že $D’ = 35$ a $P’ + 35 = 15$, teda $P’ = -20$.
To sa ale vylučuje s naším pozorovaním – nemôžeme mať záporné číslo. Posledný hod teda nemohol byť znak.
Budeme postupovať úplne rovnako ako predtým.
Čísla pred posledným hodom boli $P’$ a $D’$ a hodili sme $H$, takže nové čísla musia byť $P’$ a $D’+P’$. Zároveň vieme, že nové čísla sú $P = 15$ a $D = 35$ (keďže to bol posledný hod), takže musí platiť:
$$P’ = P = 15$$ $$D’+P’ = D = 35$$
Z toho jasne vyplýva, že $P’ = 15$ a $D’ + 15 = 35$, teda $D’ = 20$.
Obe čísla su kladné, takže posledný hod mohol byť $H$. Keďže sme však hod znak vylúčili, posledný hod musela byť hlava.
Teraz však máme úplne rovnakú úlohu, ale s číslami $15$ a $20$. Rovnakou úvahou ako predtým by sme zistili, že posledný hod nemohol byť znak (čísla pred hodom by museli byť $-5$ a $20$), ale musel byť hlava. Takže dostaneme čísla $15$ a $5$. A takto postupujeme, až kým nemáme dve rovnaké čísla:
| Hody | Z | Z | H | H | |
|---|---|---|---|---|---|
| Prvé | 5 | 10 | 15 | 15 | 15 |
| Druhé | 5 | 5 | 5 | 20 | 35 |
Začiatočné čísla $p$ a $d$ boli rovné číslu 5, a skrátená postupnosť hodov je 2Z, 2H.
Tento príklad bol pekný. Keď sme išli odzadu, tak v každom kroku nám vyšla iba jedna možnosť hodu, druhá nebola možná, lebo viedla k záporným číslam. Musí to tak však byť vždy? Vieme si z tohto príkladu odvodiť aj nejaké všeobecnejšie pozorovania?
Ak máme výsledné čísla $P$ a $D$, tak predchádzajúce čísla $P’$ a $D’$ vieme zistiť pomocou jedného odčítania (ak vám nasledujúce rovnice nie sú jasné, skúste sa vrátiť vyššie, kde sme odvádzali hodnoty $P’$ a $D’$):
Hod $Z$:
$$P’ = P - D$$ $$D’ = D$$
$$P’ = P$$ $$D’ = D - P$$
Ak sú čísla $P$ a $D$ rôzne, tak práve jedno z $P-D$ alebo $D-P$ je kladné.
Aby sme nedostali záporné čísla, tak vždy odčítavame menšie číslo od väčšieho. To zároveň určuje, posledný hod mince. Ak je menšie prvé číslo, posledný hod bol $H$, ak je menšie druhé číslo, posledný hod bol $Z$.
Keďže čísla sú vždy rôzne, tak nikdy nemáme na výber medzi hlavou a znakom. Rovnaké čísla môžeme mať iba na začiatku nášho zisťovania, keď sme prišli k hľadaným číslam z rána.
Postupnosť hodov zisťujeme odzadu.
Dášenka doniesla Bobovi čísla $P=111$ a $D=9$.
Rovnako ako v podúlohe a) to vieme spraviť postupným odčítavaním odzadu, čím dostaneme takýto výsledok:
| Akcia | H | H | Z | Z | Z | Z | Z | Z | Z | Z | Z | Z | Z | Z | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Prvé | 3 | 3 | 3 | 12 | 21 | 30 | 39 | 48 | 57 | 66 | 75 | 84 | 93 | 102 | 111 |
| Druhé | 3 | 6 | 9 | 9 | 9 | 9 | 9 | 9 | 9 | 9 | 9 | 9 | 9 | 9 | 9 |
Určite vás ale nebavilo odčítavať 9 stále a stále dookola – až dvanásťkrát. Nedalo by sa to spraviť rýchlejšie?
Vieme že 9 potrebujeme odčítať od čísla 111 toľkokrát, aby toto prvé číslo bolo menšie ako 9. Takže ak je rozdiel medzi 111 a 9 rovný 102, tak potrebujeme odčítať toľko 9, aby ich súčet bol aspoň 102. Zároveň to ale nemôžeme prehnať a dostať sa k záporným číslam. Hľadáme teda najmenší počet 9, ktorých súčet je aspoň 102.
Naša otázka teda je: “Koľkokrát musíme vynásobiť číslo 9, aby sme dostali číslo 102?”, na čo si vieme odpovedať pomocou delenia $102 / 9 \doteq 11,3$. Vidíme, že 11 deviatiek nebude stačiť a potrebujeme ich 12 (lebo $12 \cdot 9 = 108$ a to je naozaj väčšie ako 102). Mohli by sme teda povedať, že potrebný počet deviatiek je číslo $\frac{102}{9}$ zaokrúhlené nahor, teda 12.
Iný pohľad na to je, že potrebujeme od 111 odčítavať 9 kým nebudeme dostávať záporné čísla. Čo je vlastne inak povedané, “Koľkokrát sa deviatka zmestí do čísla 111?”. To sa dá vyjadriť podielom $111 / 9 \doteq 12,3$, ktorý zaokrúhlime nadol, dostaneme teda číslo $12$.
Vidíme, že oba postupy nám dávajú rovnaký výsledok – 12 odčítaní, ktorý sedí s naším predošlým riešením. Namiesto dvanástich odčítaní teda spravíme jedno delenie, do skrátenej postupnosti hodov si zapíšeme $12Z$ a nové hodnoty $P$ a $D$ budú $111 - 12\cdot 9$, teda 3 a 9.
Tento postup vieme samozrejme zovšeobecniť. Majme čísla $P$ a $D$, o ktorých predpokladajme, že $P > D$ (ak to bude naopak, tak postup bude takmer rovnaký). Chceme preto zistiť, koľko znakov v rade padlo na minci. Pýtame sa teda, koľkokrát sa hodnota $D$ zmestí do $P$, čo vieme zistiť pomocou celočíselného delenia $P / D$ (celočíselné delenie zaokrúhľuje nadol), túto hodnotu si označme $k$. Následne si do postupnosti hodov zapíšeme $kZ$, hodnota $D$ ostane nezmenená a novú hodnotu $P$ vypočítame ako $P - k\cdot D$.
Môžete si všimnúť ešte jednu zaujímavú vlastnosť. Od čísla $P$ odpočítavame hodnotu $D$ najviac krát ako vieme. To čo nám ostane je preto zvyšok po delení čísla $P$ číslom $D$. Tomu naozaj zodpovedá aj hodnota $P - k\cdot D$. A keďže väčšina programovacích jazykov vie zvyšok po delení počítať priamo, najrýchlejší spôsob ako zistiť novú hodnotu $P$ je použiť príkaz P = P%D (% označuje zvyšok po delení).
Čo ak je nová hodnota nula? Túto možnosť, že $P - k\cdot D = 0$ sme doteraz ignorovali. Všimnime si však, že v takomto prípade je číslo $P$ násobkom čísla $D$. Ak teda od $P$ odčítam $D$ iba $k-1$ krát, dostanem dve rovnaké čísla, obe rovné $D$. Takáto situácia preto nastane iba raz, a to na konci nášho výpočtu. Do skrátenej postupnosti vtedy zapíšeme $(k-1)Z$ a za hodnoty čísel $p$ a $d$ dosadíme aktuálne $D$.
Vedeli by ste riešiť takýto problém pre ľubovoľnú dvojicu čísel $P$ a $D$?
V predošlých častiach sme si ukázali všetky potrebné postupy, ostáva spojiť ich dokopy.
$k = \frac{P}{D}$ zaokrúhlené nadol
hodnota $D$ sa nemení
zmeníme hodnotu $P$ na $P - k\cdot D$
zapíšeme $kZ$ do skrátenej postupnosti
zmeníme hodnotu $P$ na $P - (k-1)\cdot D$ (čo je vlastne $D$)
zapíšeme $(k-1)Z$ do skrátenej postupnosti
$k = \frac{D}{P}$ zaokrúhlené nadol
hodnota $P$ sa nemení
zmeníme hodnotu $D$ na $D - k\cdot P$
zapíšeme $kH$ do skrátenej postupnosti
zmeníme hodnotu $D$ na $D - (k-1)\cdot P$ (čo je vlastne $P$)
zapíšeme $(k-1)H$ do skrátenej postupnosti
Tento postup spraví jeden krok nášho postupu. Budeme ho preto opakovať až kým sa čísla $P$ a $D$ nebudú rovnať. Všimnite si naviac, že v každom kroku sa zmení to, ktoré číslo je väčšie, takže naša skrátená postupnosť bude striedať hlavy a znaky.
Tento postup vieme samozrejme zapísať aj v ľubovoľnom programovacom jazyku. Skúste si pozrieť nižšie uvedenú implementáciu v Pythone. Zistíte, že sa veľmi podobá tomu, ako sme si to zapísali pred chvíľou.
print("Napis prve cislo:")
P = int(input()) # napr. číslo 111
print("Napis druhe cislo:")
D = int(input()) # napr. číslo 9
zoznam = [] # tu zapisujeme skrátenú postupnosť
while P != D: # kým sa čísla P a D nerovnajú opakuj
print(P,D)
if P > D:
k = P // D # celočíselné delenie
if P % D != 0: # číslo P nedáva po delení D zvyšok 0, nie je ním teda deliteľné
P = P - k*D
zoznam.append((k, 'Z'))
elif P % D != 0: # zvyšok je 0, P je deliteľné D
P = P - (k-1)*D
zoznam.append((k-1, 'Z'))
elif D > P:
k = D // P # celočíselné delenie
if D % P != 0: # číslo D nie je deliteľné P
D = D - k*P
zoznam.append((k, 'H'))
elif D % P == 0: # číslo D je deliteľné P
D = D - (k-1)*P
zoznam.append((k-1, 'H'))
# keďže zisťujeme ťahy odzadu, tak musíme zoznam obrátiť
zoznam.reverse()
print("Skrateny zoznam hodov:", zoznam) # [(2, 'H'), (12, 'Z')]
# vypiseme aj zaciatocne cislo
print("Rano dostala Dasa cisla rovne hodnote:", P) # 3
Pokúsme sa zamyslieť nad tým, koľkokrát musíme zopakovať vyššie uvedený postup. V jednom kroku sa rozhodneme, ktoré z čísel $P$ a $D$ je väčšie a toto väčie číslo upravíme, pričom bude menšie ako druhé číslo. Takže to, ktoré číslo je väčšie, sa bude v každom kroku striedať. Ak je najskôr $P > D$, tak hneď potom bude $P < D$, následne opäť $P > D$, a tak ďalej až kým $P = D$.
Pri každom tomto kroku vložíme do skrátenej postupnosti jeden záznam, teda jedno číslo a hod $Z$ alebo $H$. Trvanie nášho programu bude teda priamo úmerné dĺžke skrátenej postupnosti. Stále však nevieme, aká dlhá bude táto postupnosť a či to náš algoritmus zvládne aj pre čísla veľkosti milión.
Pozrime sa bližšie na to, ako sa mení číslo $P$. V každom druhom kroku sa veľkosť tohto čísla zmenší, keďže hodnoty $P$ a $D$ sa zmenšujú nastriedačku. Ako rýchlo sa toto číslo zmenšuje? Ak by sa v každých dvoch krokoch zmenšilo iba o 1, tak je to zlé. Pretože naša skrátená postupnosť by potom mala dĺžku $2\cdot P$, čo je veľa. Môže sa však číslo $P$ zmenšiť o tak málo? Skúste nájsť takú dvojicu $P$ a $D$, že po úprave čísla $P$ sa toto číslo zmenší iba o 1.
V skutočnosti totiž platí, že hodnota čísla $P$ sa musí pri jednej úprave zmenšiť aspoň na polovicu. Ukážme si, prečo je to tak. Všimnite si, že číslo $P$ sa mení v závislosti od čísla $D$. Dokonca sme si ukázali, že výsledná hodnota $P$ musí byť po úprave menšia ako hodnota $D$. Ak je teda číslo $D$ malé, bude malá aj nová hodnota $P$. Nová hodnota $P$ preto bude aspoň polovičná ak platí, že $D \leq \frac{P}{2}$ – číslo $D$ je menšie ako polovica $P$ a preto aj $P$ bude po úprave menšie ako jeho polovica.
Čo však v prípade, keď $D > \frac{P}{2}$? Pozrime sa na to, čo spraví náš algoritmus. Najskôr zistí, koľkokrát sa do čísla $P$ zmestí číslo $D$. Odpoveďou je raz, pretože $D$ je väčšie ako polovica $P$, takže dvakrát sa tam nezmestí. V ďalšom kroku sa od $P$ jedenkrát odpočíta číslo $D$. No a výsledok musí byť menší ako polovica $P$. Ak totiž máte číslo $P$ a zoberiete z neho viac ako jeho polovicu (číslo $D$), ostane vám menej ako polovica (nová hodnota $P$).
Tým pádom sa po každých dvoch krokoch hodnota čísla $P$ zmenšila aspoň na polovicu. Čo sa stane, ak bude číslo $P$ milión? V najhoršom prípade sa toto číslo zakaždým zmenší presne na polovicu až kým z neho neostane číslo 1, čo je najmenšie číslo, s ktorým Dášenka mohla začínať.
$$1000000 / 2 = 500000 / 2 = 250000 / 2 = 125000 / 2 = 62500 / 2 = 31250 / 2 = 15625 / 2 \doteq 7812 / 2 = 3906$$ $$3906 / 2 = 1953 / 2 \doteq 976 / 2 = 488 / 2 = 244 / 2 = 122 /2 = 61 / 2 \doteq 30 / 2 = 15 / 2 \doteq 7 / 2 \doteq 3 / 2 \doteq 1$$
Predošlý zápis znázorňuje, ako by sa hodnota $P$ zmenšovala1. Vidíme, že na to, aby sme z nej dostali 1 potrebujem iba 19 krokov. Samozrejme, nezabudnime, že hodnota $P$ sa zmení iba v každom druhom kroku, niekedy sa totiž musí zmenšovať aj $D$. Stále z toho však vychádza, že nám stačí 38 krokov. A aj to iba v najhoršom možnom prípade.
Pre zaujímavosť, číslo 19 – koľkrát môžme vydeliť číslo $1\,000\,000$ číslom 2 – je aj približná hodnota dvojkového logaritmu z čísla $1\,000\,000$. Logaritmovanie je v podstate opak umocňovania.
Keď chceme skrátene zapísať súčin veľa dvojok, tak to môžme skrátene napísať pomocou umocnenia: $$2\cdot 2\cdot 2\cdot 2\cdot 2\cdot 2\cdot 2\cdot 2 = 2^8$$
Poprípade súčin $k$ dvojek je $2^k$.
Logaritmom sa označuje odpoveď na otázku: Na koľkú musíme umocniť číslo 2, aby sme dostali výsledok $y$? Ak by sme teda chceli zistiť, na koľkú treba umocniť 2, aby sme dosali číslo 256 (teda hľadáme $x$ rovnice $2^x = 256$), tak odpoveďou by bol práve $\log_{2}(256)$, čo je 8.
O našom postupe by sme preto mohli povedať, že potrebuje najviac $2\cdot \log_{2}P$ krokov.
Vedeli by ste dokázať, že počiatočné číslo $p$ delí obe výsledné čísla $P$ a $D$?
Začať môžeme tým, že sa vrátime ku konkrétnym príkladom z úloh a) a b). Všimnime si, že v oboch prípadoch platí, že číslo $p$ nedelí len výsledné čísla $P$ a $D$, ale všetky čísla, ktoré si Dášenka zapísala. V podúlohe a) vidíme iba násobky čísla 5, v podúlohe b) iba násobky čísla 3. To je podozrivé.
Pozrime sa teda, čo sa deje keď Dášenka začne hádzať mincou. Začína s dvoma číslami $p$ a $d$, ktoré sú rovnaké, a teda zjavne sú obe deliteľné číslom $p$. Po prvom hode mincou môže mať Dášenka zapísané čísla $2p$ a $p$, ktoré sú opäť deliteľné číslom $p$. Po druhom hode mincou má buď dvojicu $3p$ a $p$, alebo dvojicu $2p$ a $3p$, čo sú všetko násobky $p$.
No a táto vlastnosť sa nezmení. Čo totiž robí Dášenka? Jedno číslo nahradí súčtom a druhé nechá nezmenené. Ale ak sčítame dve čísla deliteľné číslom $p$, tak opäť dostaneme číslo deliteľné $p$. Skúsme si to ukázať o niečo formálnejšie. Číslo deliteľné $p$ si vieme zapísať ako $a\cdot p$ pre nejaké kladné $a$. Zoberme si teda ľubovoľné dve čísla deliteľné $p$, ktoré vieme zapísať ako $a \cdot p$ a $b \cdot p$. Ich súčet je $a\cdot p + b\cdot p = (a + b)\cdot p$. Tento súčet je ale zjavne opäť deliteľný číslom $p$, lebo sa dá zapísať ako $c\cdot p$, pre $c = a + b$.
Keďže Dášenka začína s dvoma číslami deliteľnými číslom $p$ (dvojica $p$, $d$) a robí iba operáciu sčítanie, všetky čísla, ktoré zapisuje sú naďalej deliteľné číslom $p$. Tým pádom to platí aj pre výsledné čísla $P$ a $D$.
Vedeli by ste dokázať, že ak nejaké číslo $x$ delí obe výsledné čísla $P$ a $D$, tak delí aj pôvodné číslo $p$?
Skúsme postupovať podobne ako v podúlohe d). Zoberme si číslo $x$, ktoré delí aj $P$ aj $D$. Tieto dve čísla sa teda dajú zapísať ako $P = a\cdot x$ a $D = b \cdot x$, pre vhodné $a$ a $b$. Čo sa s týmito číslami dialo krok pred tým? V podúlohe a) sme si ukázali, že hodnoty predchádzajúcich čísel získame tak, že menšie číslom nezmeníme a od väčšieho to menšie odčítame. Tvárme sa teda, že $P > D$, pre opačný prípad by sme robili to isté, akurát naopak.
Hodnota $D$ ostane rovná $b \cdot x$, ale hodnota $P$ sa zmení na rozdiel týchto dvoch čísel. Bude preto platiť, že $P = a\cdot x - b\cdot x$. To však vieme zapísať ako $P = (a-b)\cdot x$. Nová hodnota čísla $P$ bude teda opäť deliteľná číslom $x$.
Naviac, táto vlastnosť platí všeobecne a vyššie máme uvedený aj jej dôkaz. Ak si zoberieme dve čísla deliteľné $x$, tak ich rozdiel bude opäť deliteľný číslom $x$. Pri našom postupe teda budeme celý čas pracovať s číslami, ktoré sú deliteľné číslom $x$. To bude platiť aj keď sa na konci našeho postupu dostaneme k číslam $p$ a $d$. Ak teda číslo $x$ delí výsledné čísla, delí aj začiatočné $p$.
V podúlohe d) sme ukázali, že číslo $p$ delí obe čísla $P$ a $D$. Takúto hodnotu označujeme ako spoločný deliteľ. Podúloha e) zase hovorí, že každý spoločný deliteľ $x$ čísel $P$ a $D$ delí aj číslo $p$. Z toho ale vyplýva, že $x \leq p$. Uvedomme si, že ak nejaké číslo $a$ delí číslo $b$, tak $b$ musí byť väčšie alebo rovné $a$.
Ak je teda každý spoločný deliteľ menší alebo rovný ako $p$ tak to značí, že $p$ je najväčší spoločný deliteľ čísel $P$ a $D$.
V tejto úlohe sme teda celý čas počítali najväčšie spoločné delitele dvoch čísel. A postup, ktorý ste počas toho vymysleli sa volá Euklidov algoritmus a je to najrýchlejší spôsob ako túto hodnotu vypočítať.
Viac o Euklidovom algoritme si môžete prečítať na Wikipédii (https://sk.wikipedia.org/wiki/Euklidov_algoritmus). Jediný rozdiel s naším riešením je ten, že klasický Euklidov algoritmus skončí, keď je jedno z čísel rovné nule a nie keď sú rovnaké. Vďaka tomu netreba špeciálne ošetrovať podmienku deliteľnosti čísla $P$ číslom $D$.