Dados n conjuntos de dados ai, bi, mi, encontre um xi para cada conjunto de números para satisfazer ai * xi≡bi (mod mi) e, se não houver solução, a saída será impossível.
Formato de entrada A
primeira linha contém o número inteiro n.
As próximas n linhas, cada linha contém um conjunto de dados ai, bi, mi.
Formato de saída
Um total de n linhas é emitido. Cada grupo de dados gera um número inteiro para representar um xi que atende às condições.Se não houver solução, ele será impossível.
Cada conjunto de resultados de dados ocupa uma linha, os resultados podem não ser exclusivos e qualquer resultado que atenda às condições pode ser gerado.
A resposta de saída deve estar dentro do intervalo int.
Intervalo de dados
1≤n≤105,
1≤ai, bi, mi≤2 ∗ 109
Amostra de entrada:
2
2 3 6
4 3 5
Amostra de saída:
impossível
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)倍
}
}
}