알고리즘 문제/BOJ
5618번 공약수
parkit
2020. 3. 11. 21:32
728x90
반응형
https://www.acmicpc.net/problem/5618
유클리드 호체법을 사용
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 32 33 34 35 36 37 38 39 40 41 42 43 | #include<bits/stdc++.h> using namespace std; int n, g; int gcd(int a, int b) { return b == 0 ? a : gcd(b, a%b); } int main() { cin.tie(0); scanf("%d %d", &n, &g); int a; for (int i = 1; i < n; i++) { scanf("%d", &a); g = gcd(g, a); } set<int> ans; for (int i = 1; i*i <= g; i++) { if (g % i == 0) { ans.insert(i); // i*i가 g하고 같다면 g / i도 i가 되므로 i*i != g라고 해야 한다. // 다르다면 미리 g / i까지 insert 해줄 수 있다. if (i*i != g) { ans.insert(g / i); } } } for (auto i : ans) { printf("%d\n", i); } return 0; } | cs |
728x90
반응형