思路:
根据题意,我们可以推出来 Cans + 1 = Kx
易知 Kx - Cans = 1,即ax + by = gcd(a,b)
所以对于gcd(K , C) == 1,我们用扩展欧几里得求出一个ans,否则输出impossible
但是要注意求出的ans是负数的话要通过加K变为正的,然后对于C = 1 的情况要输出K+1
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll exgcd(ll a,ll b,ll &x,ll &y)
{
if (!b)
{
x = 1,y = 0;
return a;
}
int r = exgcd(b,a%b,x,y);
int tmp = y;
y = x - (a / b) * y;
x = tmp;
return r;
}
int main()
{
ios::sync_with_stdio(false);
int t;
cin>>t;
while (t --)
{
ll a,b,x,y;
cin>>a>>b;
ll _ = exgcd(a,b,x,y);
if (_ != 1) cout<<"IMPOSSIBLE"<<'\n';
else
{
if (b == 1)
{
cout<<a+1<<'\n';
continue;
}
while (y <= 0) y += a;
cout<<y<<'\n';
}
}
return 0;
}