Rhindův papyrusThoth - egyptský bůh matematikyAugustin Louis CAUCHY
Rhindův papyrus ThothCauchy

Aritmetika včera a dnes

Kapitola první

Násobíme chytře?

Máme-li za úkol vynásobit dvě přirozená čísla a k dispozici tužku a papír, většina z nás použije algoritmus, který jsme se učili už na základní škole:
47
    53
141
235  
2491
Přesto ale algoritmů pro násobení existuje velké množství. Kromě algoritmů, které urychlují násobení zpaměti a na papíře, také prozkoumáme efektivní algoritmy pro počítačové násobení.

Násobení na prstech paní učitelky na základní škole nevidí rády. Chtějí nás totiž naučit násobit do 10 krát 10 zpaměti "jako když bičem mrská". Přesto je použití prstů přirozeným zjednodušením, kterým si lidé pomáhají při výpočtech odedávna. Středověcí obchodníci s oblibou využívali tzv. cikánskou násobilku, která umožňuje násobit pomocí prstů do 9 krát 9 (se znalostí pouhé malé násobilky do 5 krát 5). Její princip pochopíte z následujícího obrázku.

cikánská násobilka
Pokud chceme násobit 8 krát 7, zeptáme se: "Osm a kolik je deset?" "A dva." Skrčíme dva prsty na první ruce (c = 2). To samé uděláme s číslem sedm. Schováme tedy tři prsty na druhé ruce (d = 3). Na pozici desítek napíšeme součet vztyčených prstů (a + b = 3 + 2 = 5) a na pozici jednotek napíšeme součin skrčených prstů (c . d = 2 . 3 = 6). A obdržíme správný výsledek 56. Bystrý čtenář si snadno rozmyslí, že algoritmus je použitelný jen k násobení čísel, která jsou obě větší než 5, a že funguje díky následujícím rovnostem (a také si všimne, že při násobení některých čísel narazíme na jistá úskalí!)
(10 - c)(10 - d) = 100 - (c + d)10 + cd
= 10(10 - c - d) + cd
= 10(a+b) + cd
Násobení devíti nedělalo středověkým trhovcům problémy ani pro čísla od 12 do 19. Postupovali podle následujícího obrázku.
násobení devíti
Pokud chceme násobit 14 krát 9, skrčíme na levé ruce čtvrý prst. Zleva pak první prst reprezentuje stovky (a=1), zbylé prsty před skrčeným reprezentují desítky (b=2) a prsty, které následují za skrčeným, reprezentují jednotky (c=6). Výsledek: 126. Snadno si rozmyslíme, že algoritmus funguje, pomocí následujících rovností. Násobíme-li (10+d) krát 9, kde d = 2,...,9, platí:
(10 + d)9 = 90 + 9d
= 100 + 10(d - 2) + (10 - d)
= 100a + 10b + c

nahoru

Čínské (grafické) násobení je velmi názorné.

čínské násobení

nahoru

Indické násobení zde popsané není jediné, které se ve staré Indii používalo. Existovalo více než osm rozličných způsobů násobení.

indické násobení

nahoru

Egyptské (etiopské) násobení je založené na binárním zápisu násobence. (Samozřejmě etiopské kmeny nemluvily o binárním zápisu, když Egypťanům svůj způsob násobení vysvětlovaly :)

egyptské násobení
A odkud Egypťané věděli, že každé číslo má binární zápis, tj. může být vyjádřeno jako součet mocnin dvou? Pravděpodobně díky rovnoramenným vahám.
váhy
Ty totiž používali a mohli si tedy všimnout, že mají-li závaží hmotnosti n debenů (základní jednotka staroegyptského systému měření hmotnosti), mohou si pomocí rovnoramenných vah vyrobit závaží hmotnosti 2n debenů tak, že na jednu misku vah položí n-debenové závaží a na druhé misce vah jej vyváží. Spojením použitých předmětů vznikne hledané závaží hmotnosti 2n debenů. Poté již stačilo vypozorovat, že každý předmět hmotnosti m krát n debenů, kde m je přirozené číslo, je možno vyvážit pomocí závaží o hmotnostech n, 2n, 4n, 8n atd.
Program na egyptské násobení v Pythonu.
Program na egyptské násobení v PHP.

nahoru

Ruské (sedlácké) násobení je velmi podobné egyptskému. Ještě v 19. století se používalo na ruském venkově a zřejmě tak násobila většina Evropanů před prosazením dnešního indo-arabského způsobu násobení, které se dnes učíme na základní škole.

ruské násobení
Uvědomte si, že pokud přirozené číslo n není dělitelné dvojkou, znamená to, že na posledním místě v jeho binárním zápisu je jednička. Pokud je dělitelné dvojkou, pak má v binárním zápisu na posledním místě nulu. Snadno si pak rozmyslíte, že binární zápis čísla n lze získat také následujícím algoritmem:
  1. Vyděl číslo dvěma.
  2. Je-li dělitelné, zapamatuj si nulu a číslo n/2. Není-li dělitelné, zapamatuj si jedničku a číslo (n - 1)/2.
  3. Pokud zapamatované číslo není nula, opakuj algoritmus. Pokud zapamatované číslo je nula, binární zápis získáš sepsáním nul a jedniček zleva doprava v pořadí od poslední zapamatované cifry k první.
Program na ruské násobení v Pythonu.
Program na ruské násobení v PHP.

nahoru

Cauchyovo komplementární násobení využívá zápis čísel pomocí záporných cifer. Všimněme si, že při použití Cauchyova komplementárního násobení si vystačíme s malou násobilkou do 5 krát 5!

Cauchyovo násobení
Abychom mohli Cauchyovo komplementární násobení používat, musíme umět převádět zápisy čísel mezi klasickou desítkovou soustavou a desítkovou soustavou s ciframi od -4 do 5. K takové konverzi slouží následující jednoduchý algoritmus:
Program na Cauchyovo komplementární násobení.
Program na Cauchyho komplementární násobení v PHP.

nahoru