Clasa a IX-a · Divizibilitate și numere primeRead in English

Cmmdc prin împărțiri repetate (algoritmul lui Euclid) în C++

În engleză: GCD by repeated division (Euclid's algorithm)

O(log n)C++1734 de linii2 exemple

Ideea

Cel mai mare divizor comun nu se schimbă dacă înlocuim perechea (a, b) cu (b, a % b). Repetăm până când b devine 0; atunci cmmdc-ul este a. Funcționează și când unul dintre numere este 0.

Descrierea în engleză

The greatest common divisor does not change if we replace the pair (a, b) with (b, a % b). We repeat until b becomes 0; then the GCD is a. It also works when one of the numbers is 0.

Complexitate
O(log(min(a, b)))
Clasa
Clasa a IX-a (Grade 9)

Exemple

Exemplul 1

Intrare

48 18

Ieșire așteptată

6
Exemplul 2

Intrare

7 0

Ieșire așteptată

7

Codul C++

Codul complet, cu comentarii în română. Îl poți modifica liber și îl poți reseta oricând.

cmmdc-prin-impartiri.cpp
/*
 * Titlu: Cmmdc prin împărțiri repetate (algoritmul lui Euclid)
 * Clasa: 9
 * Capitol: Divizibilitate și numere prime
 * Descriere: Cel mai mare divizor comun nu se schimbă dacă înlocuim perechea
 *            (a, b) cu (b, a % b). Repetăm până când b devine 0; atunci
 *            cmmdc-ul este a. Funcționează și când unul dintre numere este 0.
 * Complexitate: O(log(min(a, b)))
 *
 * Exemplu
 * Intrare: 48 18
 * Ieșire: 6
 *
 * Exemplu
 * Intrare: 7 0
 * Ieșire: 7
 */
#include <iostream>
using namespace std;

int main()
{
    long long a, b;
    cin >> a >> b;
    while (b != 0)
    {
        long long r = a % b;
        a = b;
        b = r;
    }
    cout << a << '\n';
    return 0;
}

Rulează pe un g++ adevărat (C++17, -O2) prin Compiler Explorer. Programele trebuie să se termine repede: există o limită de timp.