[BOJ][C++] λ°±μ€ 2981λ²: κ²λ¬Έ
https://www.acmicpc.net/problem/2981
2981λ²: κ²λ¬Έ
νΈλμ νκ³ μ΄λνλ μκ·Όμ΄λ κ²½μ°°μ κ²λ¬Έμ λ°κ² λμλ€. κ²½μ°°μ μκ·Όμ΄κ° μ΄λ°νλ νλ¬Όμ νλνλ λͺ¨λ νμΈν κ²μ΄κΈ° λλ¬Έμ, κ²λ¬Ένλλ° μμ²λκ² μ€λ μκ°μ΄ κ±Έλ¦°λ€. μκ·Όμ΄λ μκ°
www.acmicpc.net
λ¬Έμ
νΈλμ νκ³ μ΄λνλ μκ·Όμ΄λ κ²½μ°°μ κ²λ¬Έμ λ°κ² λμλ€. κ²½μ°°μ μκ·Όμ΄κ° μ΄λ°νλ νλ¬Όμ νλνλ λͺ¨λ νμΈν κ²μ΄κΈ° λλ¬Έμ, κ²λ¬Ένλλ° μμ²λκ² μ€λ μκ°μ΄ κ±Έλ¦°λ€.
μκ·Όμ΄λ μκ°μ λμ°κΈ° μν΄μ μν κ²μμ νκΈ°λ‘ νλ€.
λ¨Όμ κ·Όμ²μ 보μ΄λ μ«μ Nκ°λ₯Ό μ’ μ΄μ μ λλ€. κ·Έ λ€μ, μ’ μ΄μ μ μ μλ₯Ό MμΌλ‘ λλμμ λ, λλ¨Έμ§κ° λͺ¨λ κ°κ² λλ Mμ λͺ¨λ μ°ΎμΌλ €κ³ νλ€. Mμ 1λ³΄λ€ μ»€μΌ νλ€.
Nκ°μ μκ° μ£Όμ΄μ‘μ λ, κ°λ₯ν Mμ λͺ¨λ μ°Ύλ νλ‘κ·Έλ¨μ μμ±νμμ€.
μ λ ₯
첫째 μ€μ μ’ μ΄μ μ μ μμ κ°μ Nμ΄ μ£Όμ΄μ§λ€. (2 ≤ N ≤ 100)
λ€μ μ€λΆν° Nκ° μ€μλ μ’ μ΄μ μ μ μκ° νλμ© μ£Όμ΄μ§λ€. μ΄ μλ λͺ¨λ 1λ³΄λ€ ν¬κ±°λ κ°κ³ , 1,000,000,000λ³΄λ€ μκ±°λ κ°μ μμ°μμ΄λ€. κ°μ μκ° λ λ² μ΄μ μ£Όμ΄μ§μ§ μλλ€.
νμ Mμ΄ νλ μ΄μ μ‘΄μ¬νλ κ²½μ°λ§ μ λ ₯μΌλ‘ μ£Όμ΄μ§λ€.
μΆλ ₯
첫째 μ€μ κ°λ₯ν Mμ 곡백μΌλ‘ ꡬλΆνμ¬ λͺ¨λ μΆλ ₯νλ€. μ΄λ, Mμ μ¦κ°νλ μμμ΄μ΄μΌ νλ€.
νμ΄
aμ bλ₯Ό cλ‘ λλ λλ¨Έμ§κ° κ°λ€λ©΄, a-bλ cμ λ°°μμ΄λ€.
μ΄ ννΈλ₯Ό λ³΄κ³ λ¬Έμ λ₯Ό νμ΄νμ
λ°μ μλ€μ μ°¨μ΄λ€μ μλ‘μ΄ λ²‘ν° vv μ μ μ₯νκ³
ν΄λΉ λ²‘ν° vvμ μ΅λ곡μ½μλ₯Ό ꡬνλ€,
μ΅λ곡μ½μμ μ½μλ€μ ꡬνμλ€
// Authored by : seondal
// Co-authored by : -
// #include <bits/stdc++.h>
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
int getGcd(int a, int b) {
int tmp;
while(a!=0) {
tmp = b%a;
b = a;
a = tmp;
}
return b;
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL);
// μ
λ ₯
int n;
cin >> n;
vector<int> v(n);
for(int i=0; i<n; i++)
cin >> v[i];
// vv[i] = v[i-1] - v[i-2]
sort(v.begin(), v.end());
vector<int> vv;
for(int i=1; i<n; i++)
vv.push_back(v[i]-v[i-1]);
// μ΅λ곡μ½μ ꡬνκΈ°
sort(vv.begin(), vv.end());
int gcd = vv[0];
for(int i=1; i<vv.size(); i++)
gcd = getGcd(gcd, vv[i]);
// λμ¨ μ΅λ 곡μ½μμ μ½μ ꡬνκΈ°
vector<int> ans;
for(int i=1; i<=sqrt(gcd); i++) {
if(gcd % i != 0)
continue;
ans.push_back(i);
if(i != gcd/i)
ans.push_back(gcd/i);
}
sort(ans.begin(), ans.end());
// μΆλ ₯
for(int i=0; i<ans.size(); i++) {
if(ans[i] == 1)
continue;
cout << ans[i] << " ";
}
return 0;
}
/*
*/