본문 바로가기
백준

[백준 9613] GCD 합, C++

by 황인태(intaehwang) 2020. 1. 13.
반응형

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

 

9613번: GCD 합

문제 양의 정수 n개가 주어졌을 때, 가능한 모든 쌍의 GCD의 합을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 테스트 케이스의 개수 t (1 ≤ t ≤ 100)이 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있다. 각 테스트 케이스는 수의 개수 n (1 < n ≤ 100)가 주어지고, 다음에는 n개의 수가 주어진다. 입력으로 주어지는 수는 1000000을 넘지 않는다. 출력 각 테스트 케이스마다 가능한 모든 쌍의 GCD의 합을 출력한다. 예제 입

www.acmicpc.net

 본 문제는 2013 ACM-ICPC Asia Phuket Regional Programming Contest PE번 문제로 양의 정수 n개가 주어졌을 때, 가능한 모든 쌍의 GCD의 합을 구하는 문제다. 여기서 GCD는 최대공약수를 뜻한다. GCD는 유클리드 호제법으로 코딩할 수 있다. 따라서, 유클리드 호제법을 이용한 GCD의 모든 경우의 수를 더하여 출력하면 되는 문제다.

  1. 배열에서 모든 GCD의 결과를 구한다.
  2. GCD의 결과의 합을 구한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <cstdio>
 
using namespace std;
 
// 유클리드 호제법
int cal(int x, int y) {
    if (y == 0return x;
    else return cal(y, x%y);
}
 
int main() {
    int a[101];
    int t;
    scanf("%d"&t);
    while (t--) {
        int n;
        scanf("%d"&n);
        for (int i = 0; i < n; i++) {
            scanf("%d"&a[i]);
        }
        long long ans = 0LL;
        for (int i = 0; i < n; i++) {
            for (int j = i; j < n; j++) {
                if (i == j) continue;
                ans += cal(a[i], a[j]);
            }
        }
        printf("%lld\n", ans);
    }
}
 
cs
반응형

'백준' 카테고리의 다른 글

[백준 1373] 2진수 8진수, C++  (0) 2020.01.13
[백준 17087] 숨바꼭질 6, C++  (0) 2020.01.13
[백준] 2225 - 합분해, C++  (0) 2020.01.13
[백준] 1699 - 제곱수의 합, C++  (0) 2020.01.12
[백준] 1912 - 연속합, C++  (0) 2020.01.12
Buy me a coffeeBuy me a coffee

댓글