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)
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
Intrare
48 18
Ieșire așteptată
6
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.
/*
* 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.