Euclidean algoritmus
Euclidean algoritmus (také volal Euclidův algoritmus) je algoritmus určovat největší společný dělitel (GCD) dva celá čísla. To je jeden z nejstarších algoritmů známý, protože to objevilo se v Euclid je Elementy asi 300 BC. Algoritmus nevyžaduje factoring.
Daný dvě přirozená čísla a b, první kontrola jestliže b je nulový. Jestliže ano, pak GCD je . Jestliže ne, počítat c, zbytek po rozdělení b. Nahradit s b, b s c, a zahájit proces znovu.
Například, GCD 1071 a 1029 je počítán tímto algoritmem být 21 s následujícími kroky:
| b | c | |
| 1071 | 1029 | 42 |
| 1029 | 42 | 21 |
| 42 | 21 | 0 |
| 21 | 0 | |
Algoritmus může být vytvořen v Python programovacím jazyce takto:
def gcd (, b): zatímco b! = 0: c = % b = b b = c návrat absolutní ()
( absolutní hodnota je používána v poslední řadě zajistit, že algoritmus správně se zabývá negativními vstupy; např. gcd (- 7, 0) = 7.)
Tím, že drží dráhu kvocientů nastávat během algoritmu, jeden může také určovat celá čísla p a q s ap+bq = gcd (,b). Toto je známé jako prodloužený Euclidean algoritmus.
Tyto algoritmy mohou být používány v nějakém kontextu kde divize s remainder je možný. Toto zahrnuje ringss polynomials přes pole stejně jako kruh Gaussian celých čísel, a obecně všechny Euclidean domény.
Euclid původně vytvořil problém geometricky, jako problém nálezu obyčejný “míra” pro dva délky řádky a jeho algoritmus pokračovali opakovaným odčítáním kratší od delší části. Toto je objasněno s následující implementací v Python, který pracuje jen pro pozitivní vstupy a je značně méně výkonný než metoda vysvětlila to nahoře:
def gcd (, b): zatímco! = b: jestliže > b: = - b jinde: b = b - návrat
| Tabulka s obsahem |
| 1 důkaz správnosti Euclidean algoritmu 2 provozní 3 řetězové zlomky |
Důkaz správnosti Euclidean algoritmu
Důkaz tohoto algoritmu není těžký. Předpokládat a b jsou čísla jehož GCD musí být předurčený. A předpokládat zbytek divize b je c. Proto = qb + c kde q je kvocient divize. Nyní nějaký společný dělitel a b také se dělí c (protože c moci být psán jak c = - qb); podobně, nějaký společný dělitel b a c bude také se dělit . Tak největší společný dělitel a b je stejný jako největší společný dělitel b a c. Proto to je dost jestliže my pokračujeme v procesu s čísly b a c. Protože c je menší v absolutní hodnotě než b, my odkážeme dosah c = 0 poté, co finitely mnoho kroků.
Když analyzuje provozní Euclid je algoritmus, to vypne to vstupy vyžadovat nejvíce kroky jsou dva postupný Fibonacci čísla, a nejhorší případ vyžaduje a théta; (n) divize, kde n je množství číslic ve vstupu (vidět Velký O notace).
Kvocienty, které se objeví když Euclidean algoritmus je aplikován na vstupy a b být přesně čísla se vyskytovat v řetězovém zlomku reprezentace /b. Brát například příklad = 1071 a b = 1029 použitý nahoře. Tady je výpočet se zvýrazněnými kvocienty:
- 1071 = 1029 × 1 + 42
- 1029 = 42 × 24 + 21
- 42 = 21 × 2 + 0
- .