Baekjoon/Math
[백준 9613] GCD 합 (Math) (C/C++)
워니-
2020. 1. 24. 14:36
#include <stdio.h> #include <iostream> #include <algorithm> #include <map> #include <string> #include <vector> #include <queue> using namespace std; int test; vector<int> v; vector<int> choice; vector<int> reserve; // 유클리드 호제법 int gcd(int a, int b) { if(b == 0) { return a; } else { return gcd(b, a%b); } } void DFS(int idx, int cnt) { if(cnt == 2) { int GCD = gcd(choice[0], choice[1]); reserve.push_back(GCD); return; } for(int i = idx; i < v.size(); i++) { choice.push_back(v[i]); DFS(i+1, cnt+1); choice.pop_back(); } } int main(void) { // freopen("B9613_input.txt", "r", stdin); cin >> test; for(int T = 1; T <= test; T++) { v.clear(); reserve.clear(); int N; cin >> N; for(int i = 1; i <= N; i++) { int num; cin >> num; v.push_back(num); } DFS(0, 0); long long sum = 0; for(int i = 0; i < reserve.size(); i++) { sum += reserve[i]; } cout << sum << endl; } return 0; } | cs |