카테고리 없음

[백준] 300 - 수학 1 : GCD 합 (9613번 JAVA)

MoveForward 2023. 1. 8. 09:40

[백준] 300 - 수학 1 : GCD 합 (9613번 JAVA)


[주의점]

각 케이스별 gcd의 최대값은 1,000,000 * 1,000,000 이다. => int로 담을 수 없다.

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

public class Main{

    public static void main(String[] args) throws IOException{

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int t = Integer.parseInt(br.readLine());

        long sum = 0;

        for(int k=0; k<t; k++){

            StringTokenizer st = new StringTokenizer(br.readLine());
            int n = Integer.parseInt(st.nextToken());
            int[] arr = new int[n];

            for(int i=0; i<n; i++){
                arr[i] = Integer.parseInt(st.nextToken());
            }

            sum = 0;

            for(int i=0; i<n-1; i++){
                for(int j=i+1; j<n; j++){
                    sum += gcd(arr[i], arr[j]);
                }
            }

            bw.write(sum + "\n");
        }


        bw.flush();
        bw.close();
    }

    // Greatest Common Divisor (최대 공약수)
    public static int gcd(int a, int b){
        while(b != 0){
            int r = a % b;
            a = b;
            b = r;
        }
        return a;
    }
}