확장 유클리드 호제법 응용 문제.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef tuple<int, int, int> tiii;
pll EUC(ll K, ll C)
{
if(C == 0) return {1, 0};
auto [x, y] = EUC(C, K%C);
return {y, x - K/C * y};
}
void solve()
{
ll K, C; cin >> K >> C;
if(gcd(K, C) != 1)
{
cout << "IMPOSSIBLE\n";
return;
}
auto [x, y] = EUC(K, C); //x, y : 방정식을 만족하는 해 중 하나
//zx, zy : x, y의 일반해
//zx = x + z*C, zy = y - z*K
ll zx = -x>0 ? (-x-1)/C+1 : (-x)/C; //x < 0
ll zy = y>0 ? (y-1)/K+1 : y/K; //y > 0
ll z = min(zx, zy) - 1; //x < 0, y > 0을 만족시키는 z
if(y-ll(1e9) <= z*K) cout << y-z*K << "\n"; //y <= 1e9을 만족시키는 z를 구하고, 최종적으로 y를 구한다.
else cout << "IMPOSSIBLE\n";
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
int t; cin >> t;
while(t--) solve();
}
5615번: 아파트 임대 - 수학(밀러-라빈) (0) | 2024.07.21 |
---|---|
15718번: 돌아온 떡파이어 - 수학(중국인의 나머지 정리, 뤼카의 정리) (0) | 2024.07.21 |
11402번: 이항 계수 4 - 수학(뤼카의 정리) (0) | 2024.07.21 |
16229번: 반복 패턴 - Z (0) | 2024.07.21 |
13713번: 문자열과 쿼리 - Z (2) | 2024.07.20 |
댓글 영역