1일1알

백준 2942번 퍼거슨과 사과 C++ 본문

알고리즘

백준 2942번 퍼거슨과 사과 C++

영춘권의달인 2023. 3. 2. 12:25

https://www.acmicpc.net/problem/2942

 

2942번: 퍼거슨과 사과

맨체스터 유나이티드의 감독 퍼거슨은 빨간 사과를 R개, 초록 사과를 G개 가지고 있다. 훈련장에 있는 선수들 중 몇 명에게 나누어 주려고 한다. 단, 선수들이 서로 같은 개수의 사과를 받지 못하

www.acmicpc.net

 

r과 g의 최대공약수를 구하고 최대공약수의 약수들을 구한다.

 

#include <iostream>
#include <string>
#include <vector>
#include <math.h>
#include <algorithm>
#include <utility>
#include <stack>
#include <queue>
#include <math.h>
#include <set>
#include <map>
#include <list>
#include <unordered_map>
#include <unordered_set>
#include <iomanip>
#include <limits.h>

using namespace std;
using int64 = long long;

int GetGcd(int a, int b) {
    if (a % b == 0) return b;
    return GetGcd(b, a % b);
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    int r, g;
    cin >> r >> g;
    int gcd = GetGcd(r, g);
    vector<int> v;
    for (int i = 1; i * i <= gcd; i++) {
        if (gcd % i == 0) {
            v.push_back(i);
            if (gcd == i * i) continue;
            v.push_back(gcd / i);
        }
    }
    for (auto a : v) {
        cout << a << " " << r / a << " " << g / a << "\n";
    }
}