http://acm.hdu.edu.cn/showproblem.php?pid=1576
此题是裸扩展gcd
设A/B=x;
A%9973=n即 A = 9973*k + n 即B*x-9973*k=n 一个基本的同余方程,利用扩展gcd求解x即可。
#include
#include
#include
#include
using namespace std;
long long exGcd(long long a, long long b, long long &x, long long &y){
if(b == 0){
x = 1;
y = 0;
return a;
}
long long gcd = exGcd(b, a%b, y, x);
y -= (a/b) * x;
return gcd;
}
int main(){
int cas;
scanf("%d",&cas);
while(cas--){
int n,B;
scanf("%d%d",&n,&B);
long long a = B, b = -9973, c = n,x,y;
long long gcd = exGcd(a,b,x,y);
if(c % gcd) continue;///证明没有解
x *= c / gcd;///求出一个特解
if(b / gcd < 0) b = -b;
x %= b / gcd;///利用特解求出通解x + t*(b/gcd)
if(x < 0) x += b/gcd;///保证解是整数
printf("%d\n",x % 9973);
}
//system("pause");
return 0;
}