Study hard

(c++)백준 9613번: GCD 합 본문

백준/여러가지 문제들

(c++)백준 9613번: GCD 합

Nimgnoej 2020. 6. 17. 09:16

https://www.acmicpc.net/problem/9613

 

9613번: GCD 합

문제 양의 정수 n개가 주어졌을 때, 가능한 모든 쌍의 GCD의 합을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 테스트 케이스의 개수 t (1 ≤ t ≤ 100)이 주어진다. 각 테스트 케이스는 한 줄로 ��

www.acmicpc.net

[풀이]

이중for문으로 원소가 2개인 중복없는 쌍들을 만들 수 있다.

GCD는 유클리드 호제법으로 풀었다. 

72 = 34 * 2 + 4
34 = 4 * 8 + 2
4 = 2 * 2
72, 34의 최대공약수: 2
#include <iostream>
#include <vector>
using namespace std;

int t, n;
int Num[101];//양의 정수 n개 저장
vector<int>Pair;//최대 공약수 구할 쌍
long long gcdSum = 0;

int getGcd(int a, int b) {
	int c;
	while (b != 0) {
		c = a % b;
		a = b;
		b = c;
	}
	return a;
}

void solution() {
	cin >> t;
	while (t--) {
		cin >> n;
		for (int i = 0; i < n; i++) {
			cin >> Num[i];
		}
		for (int i = 0; i < n - 1; i++) {
			for (int j = i + 1; j < n; j++) {
				gcdSum += getGcd(Num[i], Num[j]);
			}
		}
		cout << gcdSum << endl;
		gcdSum = 0;
	}
}

int main() {
	solution();
	return 0;
}