알고리즘/코테
[백준 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;
}
}