티스토리 뷰

백준 문제풀이

백준[baekjoon] 6064

소심야채 2021. 2. 15. 21:48

www.acmicpc.net/problem/6064

 

6064번: 카잉 달력

입력 데이터는 표준 입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터는 한 줄로 구성된다.

www.acmicpc.net

 

[잡담]

더보기

정수론 공부의 필요성을 느껴 유투브 보면서 기초부터 공부하고있다.

모듈러 기초연산부터 페르마 소정리, 중국인의 나머지 정리, 뤼카의 정리등 처음볼때는 전혀 이해가 안갔지만

이항계수 정리등 블로그로 부족한 개념을 채우다 보니 어느정도 이해하게 되었다.

지금이라도 수학공부를 꾸준히 해놔야겠다.

[코드]

더보기
#include<bits/stdc++.h>

using namespace std;

typedef long long LL;

tuple<int,int,int> extended_euclidean(int a, int b)
{
    if(b == 0) return make_tuple(a,1,0);

    int g, x, y;
    tie(g, x, y) = extended_euclidean(b, a%b);
    return make_tuple(g, y, x-(a/b)*y);
}

int main()
{
    ios_base::sync_with_stdio(0), cin.tie(0);

    int TC;
    cin >> TC;
    while(TC--){
        int M, N, x, y;

        cin >> M >> N >> x >> y;

        int g, x0, y0;

        tie(g, x0, y0) = extended_euclidean(M, N);
        if((x-y)%g != 0){
            cout << -1 << '\n';
            continue;
        }

        LL lcm = M*N/g;
        LL ans = 1LL*(y-x)*x0/g*M + x;
        ans %= lcm;
        while(ans<0){
            ans += lcm;
        }

        cout << ans << '\n';
    }

    return 0;
}

 

'백준 문제풀이' 카테고리의 다른 글

백준[baekjoon] 26518  (0) 2022.12.26
백준[baekjoon] 17142  (0) 2021.05.09
백준[baekjoon] 2336  (0) 2021.02.11
백준[baekjoon] 11333  (0) 2021.02.11
백준[baekjoon] 8201  (0) 2020.07.17
댓글