nセットのデータai、bi、miが与えられた場合、数値の各セットについてxiを見つけてai *xi≡bi(mod mi)を満たします。解がない場合、出力は不可能です。
入力形式
最初の行には整数nが含まれています。
次のn行には、各行にai、bi、miのデータのセットが含まれています。
出力形式
合計n行出力し、各データ群は条件を満たすxiを表す整数を出力します解がない場合は出力できません。
データ結果の各セットは1行を占め、結果は一意ではない可能性があり、条件を満たすすべての結果を出力できます。
出力の回答はintの範囲内でなければなりません。
データ範囲
1≤n≤105、1≤ai、
bi、mi≤2∗ 109
入力サンプル:
2
2 3 6
4 3 5
出力サンプル:
不可能
7
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int t,a,b,m,x,y;
int exgcd(int a,int b,int &x,int &y)
{
if(!b)
{
x=1;y=0;
return a;
}
int d=exgcd(b,a%b,x,y);
int tmp=x;
x=y;
y=tmp-a/b*y;
return d;
}
int main()
{
cin>>t;
while(t--)
{
cin>>a>>b>>m;
int d=exgcd(a,m,x,y);
// cout<<d<<endl;
if(b%d!=0) cout<<"impossible"<<endl;
else
{
cout<<(ll)x*(b/d)%m<<endl; //扩大了(b/d)倍
}
}
}