[백준] 9613번 GCD 합 / C++
#문제
#풀이
#include <iostream>
#include <vector>
using namespace std;
int GCD(const int x, const int y)
{
int a = x > y ? x : y;
int b = x > y ? y : x;
int r = a % b;
while (r != 0)
{
a = b;
b = r;
r = a % b;
}
return b;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin >> t;
while (t--)
{
int n;
cin >> n;
vector<int> arr;
arr.reserve(n + 1);
for (int i = 0; i < n; ++i)
{
int x;
cin >> x;
arr.push_back(x);
}
long long total = 0;
for (int i = 0; i < arr.size() - 1; ++i)
{
for (int j = i + 1; j < arr.size(); ++j)
{
total += GCD(arr[i], arr[j]);
}
}
cout << total << '\n';
}
return 0;
}
#정리
테스트 케이스 t를 입력 받고, 각 케이스 별로 n개의 숫자를 받는다. 테스트 케이스별로 입력 받은 모든 숫자들을 쌍으로 GDC를 구하고, 구한 모든 GDC의 합계를 출력하는 문제. 테스트 케이스별로 vector를 초기화하고 n개의 숫자를 vector에 push한 뒤, 모든 숫자를 버블로 GCD를 구했다. 구한 값을 total 변수에 더하고 출력하여 해결.
Enjoy Reading This Article?
Here are some more articles you might like to read next: