알고리즘/코테

[백준 1750] 서로소의 개수

kiwiiiv 2022. 5. 26. 22:21

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

 

1750번: 서로소의 개수

예제 1의 경우 가능한 경우의 수는 (2, 3), (4, 3), (2, 4, 3)이다.

www.acmicpc.net

 

https://velog.io/@yerin4847/W1-%EC%9C%A0%ED%81%B4%EB%A6%AC%EB%93%9C-%ED%98%B8%EC%A0%9C%EB%B2%95

 

유클리드 호제법(Euclidean-algorithm)

유클리드 호제법에 대해 알아보자.

velog.io

 

https://nicotina04.tistory.com/47

 

백준 1750 - 서로소의 개수

icpc.me/1750 수열이 주워지고 이들의 조합으로 만든 집합 중 원소들이 서로소가 됨을 만족하는 것 개수를 구하는 문제이다. DP 테이블 구성이 어려울 수 있으나 집합의 개수와 유사한 형태로 짤 수

nicotina04.tistory.com

 

 

//오답 (TC2 번 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.HashSet;

public class Main {
    private static int MAX_NUM = 10000003;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        HashSet<Integer> set = new HashSet<>();
        for (int i = 0; i < N; i++) {
            set.add(Integer.valueOf(br.readLine()));
        }
        Integer[] seq = set.stream().toArray(Integer[]::new);
        int num = seq.length;
        int remainder = 0;
        for (int i = 0; i < num; i++) {
            for (int j = i + 1; j < num; j++) {
                if (isPrimeNumber(seq[i], seq[j])) {
                    remainder += (Math.pow(2.0, (num - 1.0) - j)) % MAX_NUM;
                    remainder %= MAX_NUM;
                }
            }
        }
        if (remainder != 0) remainder++;
        System.out.println(remainder);
    }

    private static boolean isPrimeNumber(int a, int b) {
        int tmp;
        int dividend = Math.max(a, b);
        int remainder = Math.min(a, b);
        do {
            tmp = dividend % remainder;
            dividend = remainder;
            remainder = tmp;
        } while (remainder != 0);
        if (dividend == 1) {
            return true;
        }
        return false;
    }
}