


import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        for (int i = 0; i < n; i++) {
            int a = sc.nextInt();
            int arr[] = new int[a];
            for (int j = 0; j < a; j++) {
                arr[j] = sc.nextInt();
            }
            long sum = 0;
            // 1, 2 / 2, 3 / 3, 4 이런 형태의 매개변수로 gcd 호출
            for (int k = 0; k < a - 1; k++) {
                for (int m = k + 1; m < a; m++) {
                    sum += gcd(arr[k], arr[m]);
                }
            }
            System.out.println(sum);
        }
        sc.close();
    }
    // 유클리드 호제법 이용
    static int gcd (int a, int b) {
        if(b == 0) {
            return a;
        } else {
            return gcd(b, a % b);
        }
    }
}


-> 최대공약수를 구하는 문제이다.
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int b = sc.nextInt();
        int arr[] = new int[a];
        for(int i = 0; i < a; i++) {
            int n = sc.nextInt(); // 동생 위치
            arr[i] = Math.abs(b - n); // 나의 위치와 동생의 위치 차이
        }
        int answer = arr[0];
        for(int i = 1; i < arr.length; i++) {
            answer = gcd(answer, arr[i]); // 위치 차이들 중에서 최대공약수 구하기
        }
        System.out.println(answer);
        sc.close();
    }
    // 유클리드 호제법 이용
    static int gcd (int a, int b) {
        if(b == 0) {
            return a;
        } else {
            return gcd(b, a % b);
        }
    }
}


import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        StringBuilder sb = new StringBuilder();
        
        int n = sc.nextInt();
        
        if(n == 0) {
            System.out.println(0);
        } else {
            while(n != 1) {
                sb.append(Math.abs(n % -2));
                n = (int)Math.ceil((double)n / (-2));
            }
            sb.append(n);
        }
        System.out.println(sb.reverse());
        
        sc.close();
    }
}