https://github.com/o920/baekjoon/blob/master/2981.cpp
#include <iostream>
#include <algorithm>
using namespace std;
int arr[100]; // 입력받는 배열
int ans[100]; // 최대공약수의 약수를 구하는 배열
int gcd(int a, int b) { // 최대공약수 구하는 함수
return a % b ? gcd(b, a%b) : b;
}
int main() {
//입력받기
int n;
cin >> n;
for (int i = 0; i < n; i++) cin >> arr[i];
sort(arr, arr + n); // 오름차순 정렬
//최대공약수 구하기, arr[i]-arr[i-1] = M * (arr[i]/M - arr[i-1]/M)
int sub = arr[1] - arr[0];
for (int i = 2; i < n; i++) sub = gcd(sub, arr[i] - arr[i - 1]);
//최대공약수의 약수 구하기
int count = 0;
for (int i = 1; i*i <= sub; i++) {
if (sub%i == 0) {
ans[count++] = i;
if (i != sub / i) ans[count++] = sub / i;
}
}
sort(ans, ans + count);
//출력
for (int i = 0; i < count; i++) {
if (ans[i] != 1) cout << ans[i] << " ";
}
}
'코테' 카테고리의 다른 글
백준 11050 : 이항계수1 c++ 정답 (0) | 2020.04.01 |
---|---|
백준 3036 : 링 c++ 정답 (0) | 2020.04.01 |
백준 11399 : ATM c++ 정답(그리디 알고리즘) (0) | 2020.03.25 |
백준 11047 : 동전 0 c++ 정답 (0) | 2020.03.23 |
백준 12865 : 평범한 배낭 c++ 정답 (배열 사용) (0) | 2020.03.23 |