Úloha 10: Určení NSD a nsn (Eukleidův algoritmus)
Cíl úlohy
Vytvořte skript, který z formuláře přijme dvě přirozená čísla a a b a pomocí Eukleidova algoritmu nalezne jejich největšího společného dělitele NSD(a, b) a nejmenší společný násobek nsn(a, b).
Eukleidův algoritmus a nsn (MathML)
Eukleidův algoritmus je jeden z nejstarších známých matematických algoritmů (popsán kolem roku 300 př. n. l.). Využívá faktu, že pokud číslo dělí obě čísla a i b, musí dělit i jejich rozdíl:
Jakmile známe NSD, nejmenší společný násobek nsn spočítáme ze vztahu:
Úvahy a doporučený postup řešení
- Odčítací verze Eukleidova algoritmu: Dokud
$a != $b, od většího čísla odčítáme menší (if ($a > $b) $a = $a - $b; else $b = $b - $a;). Když se čísla vyrovnají, společná hodnota je NSD. - Rychlejší modulová verze: Pro velká čísla (např. 1 000 000 a 1) je odčítání pomalé. Rychlejší je nahradit odčítání zbytkem po dělení:
$r = $a % $b; $a = $b; $b = $r;dokud$b != 0. - Zachování původních hodnot: Protože algoritmus v cyklu mění hodnoty
$aa$b, uložte si na začátku jejich kopie do$a_origa$b_orig, abyste mohli spočítatnsna vypsat zadání.
Doplňující otázky k zamyšlení a náměty na rozšíření
- 1. Kdy nazýváme dvě čísla nesoudělná? Jaký je jejich NSD a nsn?
- 2. Kde v praktické matematice využíváme NSD (např. krácení zlomků do základního tvaru) a nsn (např. převod zlomků na společného jmenovatele při sčítání)?
- 3. Jak byste spočítali NSD pro 3 čísla
a, b, c? (Nápověda: ). - 4. O kolik kroků je rychlejší modulová varianta s
%než odčítací varianta pro čísla a ?
Vyzkoušejte funkční řešení: Otevřít vzorovou úlohu nsd.php