题目描述
给定 n 组数据 ai,bi,mi,对于每组数求出一个 xi,使其满足 ai×xi≡bi(modmi),如果无解则输出 impossible。
输入
第一行包含整数 n。
接下来 n 行,每行包含一组数据 ai,bi,mi。
1≤n≤1e5
1≤ai,bi,mi≤2e9
输出
输出共 n 行,每组数据输出一个整数表示一个满足条件的 xi,如果无解则输出 impossible。
每组数据结果占一行,结果可能不唯一,输出任意一个满足条件的结果均可。
输出答案必须在 int 范围之内。
输入样例
2
2 3 6
4 3 5
输出样例
impossible
-3
这道题是一道典型的线性同余方程。
题解
#include<iostream>
using namespace std;
int x,y;
int gcd(int a,int m){
return m?gcd(m,a%m):a;
}
void exgcd(int a,int m){
int t;
if(m==0){
x=1;
y=0;
}
else{
exgcd(m,a%m);
t=x;
x=y;
y=t-(a/m)*y;
}
}
int main(){
int n,a,b,m,g;
cin>>n;
while(n--){
cin>>a>>b>>m;
g=gcd(a,m);
exgcd(a,m);
if(b%gcd(a,m)==0)
cout<<(x*b)/gcd(a,m)<<endl;
else
cout<<"impossibe"<<endl;
}
return 0;
}
希望度大家有用。