Search
Duplicate
📒

공약수

주차
문제번호
5618
언어
C++
티어
브론즈
유형
수학
브루트포스
정수론
nj_Blog
nj_상태
이해도
66%
풀이
사람
이해도 2
13 more properties

문제접근

입력 받을때 가장 큰 수를 업데이트 하고 1부터 그 큰수만큼 모든 입력 받은 숫자를 나눌 수 있는지 확인한다

놓쳤던 부분

유클리드 호제법으로 풀 수 있음
#include <bits/stdc++.h> using namespace std; int n, a[3], _gcd; vector<int> ans; int gcd(int a, int b){ if(b == 0) return a; return gcd(b, a%b); } int main() { ios::sync_with_stdio(0); cin.tie(0); cin >> n; for (int i = 0; i < n; i++) cin >> a[i]; _gcd = gcd(a[0], a[1]); if(n == 3) _gcd = gcd(_gcd, a[2]); for (int i = 1; i*i <= _gcd; i++){ if(_gcd % i == 0){ ans.push_back(i); if(_gcd/i != i) ans.push_back(_gcd/i); } } sort(ans.begin(), ans.end()); for(auto x : ans) cout << x << '\n'; }
JavaScript
복사

코드

2020 KB

328 ms

#include <iostream> #include <vector> using namespace std; int main(void) { int n; vector<int> v; int max = 0; bool flag = false; ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n; v.resize(n); for (int i = 0; i < n; i++) { cin >> v[i]; if (v[i] > max) max = v[i]; } for (int i = 1; i <= max; i++) { for (unsigned int j = 0; j < v.size(); j++) { if (v[j] % i != 0) { flag = true; break ; } } if (!flag) cout << i << "\n"; flag = false; } return (0); }
C++
복사