Najprostszym sposobem na znalezienie największego wspólnego dzielnika ciągu liczb jest użycie algorytmu Euklidesa. Aby to zrobić, należy zacząć od dwóch liczb a i b, a następnie powtarzać poniższy krok, aż do momentu, gdy b stanie się równe 0:
Oblicz resztę dzielenia a przez b.
Przypisz wartość b do a.
Przypisz wartość reszty dzielenia do b.
Największy wspólny dzielnik a i b jest równe a, gdy b jest równe 0.
dla każdej liczby ciągu wykonujemy krok 1 algorytmu Euklidesa z poprzednią wyliczoną wartością. Na końcu otrzymujemy największy wspólny dzielnik całego ciągu.
piotrekk16gg
Tak, algorytm Euklidesa działa dla wielu liczb. Można obliczyć największy wspólny dzielnik większej liczby liczb, stosując ten sam algorytm. Należy wtedy porównać NWD dwóch pierwszych liczb z kolejną, a wynik porównać z kolejną, aż do przejrzenia całego ciągu. Ostatecznie wynik będzie NWD całego zbioru.
Odpowiedź:
#include <iostream>
#include <algorithm>
using namespace std;
int gcd(int a, int b) {
if (b == 0)
return a;
return gcd(b, a % b);
}
int main() {
int n;
cin >> n;
int a[n];
for (int i = 0; i < n; i++) {
cin >> a[i];
}
int result = a[0];
for (int i = 1; i < n; i++) {
result = gcd(result, a[i]);
}
cout << result << endl;
return 0;
}
Wyjaśnienie:
Najprostszym sposobem na znalezienie największego wspólnego dzielnika ciągu liczb jest użycie algorytmu Euklidesa. Aby to zrobić, należy zacząć od dwóch liczb a i b, a następnie powtarzać poniższy krok, aż do momentu, gdy b stanie się równe 0:
Oblicz resztę dzielenia a przez b.
Przypisz wartość b do a.
Przypisz wartość reszty dzielenia do b.
Największy wspólny dzielnik a i b jest równe a, gdy b jest równe 0.
dla każdej liczby ciągu wykonujemy krok 1 algorytmu Euklidesa z poprzednią wyliczoną wartością. Na końcu otrzymujemy największy wspólny dzielnik całego ciągu.