๐Ÿ•๏ธ ICPC Sinchon/Basic Math

[BOJ][C++] ๋ฐฑ์ค€ 2981๋ฒˆ: ๊ฒ€๋ฌธ

์„ ๋‹ฌ 2023. 1. 24. 03:55
๋ฐ˜์‘ํ˜•

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;
}

/*
 */
๋ฐ˜์‘ํ˜•