• Slouží k nalezení největšího společného dělitele
  • Postup
    1. Máme dvě čísla a ().
    2. Dělíme číslem a najdeme zbytek , tedy:
    3. Nahrazujeme hodnotou a hodnotou .
    4. Opakujeme, dokud . V tom okamžiku je výsledný největší společný dělitel.
  • Příklad
    • Najdeme gcd⁡(48,18)
    1. zbytek 12, takže .
    2. zbytek 6, tedy .
    3. zbytek 0, tedy .
    4. Výsledek: gcd⁡(48,18)=6
  • Časová složitost je
  • Často se používá v kryptografii

Věta - Bézoutova rovnost

Nechť . Pak existují čísla taková, že .

  • Jinými slovy říká, že NSD dvou přirozených čísel lze zapsat jako lineární kombinaci s celočíselnými koeficienty. Tyto koeficienty můžeme získat použitím rozšířeného Euklidova algoritmu.
# 01 rekurzivní 
def gcd_recursive(a, b):
    if b == 0:
        return a
    return gcd_recursive(b, a % b)
 
# 02 iterativní
def gcd_iterative(a, b):
    while b:
        a, b = b, a % b
    return a
 
# 03 rozšířený rekurzivní
def extended_gcd_recursive(a, b):
    if b == 0:
        return a, 1, 0  # NSD = a, x = 1, y = 0
    gcd, x1, y1 = extended_gcd_recursive(b, a % b)
    x = y1
    y = x1 - (a // b) * y1
    return gcd, x, y