문제 링크: https://www.acmicpc.net/problem/9613
자연수 n개가 주어졌을 때, 가능한 모든 쌍의 GCD 합을 구하는 문제입니다.
간단히 for문 두개로 모든 조합의 gcd를 구하고, 이를 변수에 차곡차곡 더하면 됩니다.
#define _CRT_SECURE_NO_WARNINGS
#include <bits/stdc++.h>
using namespace std;
int main()
{
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
#endif
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int t;
cin >> t;
while (t--) {
vector<int> v;
int n;
long long sum=0;
cin >> n;
v.resize(n);
for (auto& c : v)
cin >> c;
for (int i = 0; i < n-1; ++i) {
for (int j = i + 1; j < n; ++j) {
sum += gcd(v[i], v[j]);
}
}
cout << sum << '\n';
}
return 0;
}
주의해야 할 점이 있는데요, gcd 합의 범위가 int형을 초과할 수 있기 때문에 long long 등의 자료형으로 합을 저장하셔야 합니다.
반응형
'Online Judge > 백준' 카테고리의 다른 글
[백준][C++] 1373: 2진수 8진수 (0) | 2020.04.10 |
---|---|
[백준][C++] 17087: 숨바꼭질 6 (0) | 2020.04.10 |
[백준][C++] 2004: 조합 0의 개수 (0) | 2020.04.10 |
[백준][C++] 1676: 팩토리얼 0의 개수 (0) | 2020.04.10 |
[백준][C++] 17822: 원판 돌리기 (0) | 2020.04.08 |