KDHzoot's Github

Code for study, project, etc

자세히보기

알고리즘/PS

[백준 9613] GCD 합

kdhzoot 2020. 7. 6. 16:24

문제 링크 : https://www.acmicpc.net/problem/9613

 

9613번: GCD 합

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

www.acmicpc.net

사용 알고리즘:

gcd

 

gcd 알고리즘만 알고 있다면 풀 수 있는 간단한 문제이다.

 

주의할 점은 gcd합이 int범위를 넘어갈 수 있기 때문에 long long으로 선언해줘야 한다는 것이다.

 

 

 

두 값이 모두 1,000,000일 경우 GCD도 1,000,000이 된다.

 

이러한 쌍이 최악의 경우 100*99/2개 만큼 존재할 수 있으므로 거뜬히 int범위를 벗어난다.

 


 

그 외의 코드는 간단하다.

 

#include <iostream>
#define n_ 200
using namespace std;

int gcd(int a,int b) {
	if (a % b == 0)
		return b;
	return gcd(b, a % b);
}

int main(void) {
	int T, n;
	int arr[n_];
	cin >> T;
	while (T--) {
		scanf("%d", &n);
		for (int i = 0; i < n; i++) {
			scanf("%d", arr + i);
		}

		long long res = 0;
		for (int i = 0; i < n; i++) {
			for (int j = i + 1; j < n; j++) {
				res += gcd(arr[i], arr[j]);
			}
		}
		printf("%lld\n", res);
	}
}

'알고리즘 > PS' 카테고리의 다른 글

[백준 1780] 종이의 개수  (0) 2020.07.06
[백준 3036] 링  (0) 2020.07.06
[백준 11729] 하노이 탑 이동 순서  (0) 2020.07.06
[백준 14650] 걷다보니 신천역 삼 (Small)  (0) 2020.07.05
[백준 1735] 분수 합  (0) 2020.07.05