题目大意:给出n=A%9973,以及B的值,求(A/B)%9973。
解题思路:本题主要在于转化以及推导。可以转化为模线性方程,利用扩展GCD进行求解。由n=A%9973我们可以推导出(推导过程:n=A-A/9973*9973,由A/B=x,则Bx-A/9973*9973=n,则Bx-9973y=n)bx-9973y=n,那么x就是我们要求的答案,即求该线性方程的解。这里直接利用扩展GCD求x,y使得gcd(a,b)=a*x+b*y,直接就可以求出来,详见code。
题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=1576
code:
#include <iostream>
#include <cstdio>
using namespace std;
#define ll __int64
ll x,y,n,b;
int T;
ll extgcd(ll a,ll b,ll &x,ll &y){ //模板,x,y为解
if(b==0) {x=1;y=0;return a;}
ll d=extgcd(b,a%b,x,y);
int t=x;
x=y;
y=t-a/b*y;
return d;
}
int main(){
scanf("%d",&T);
while(T--){
scanf("%I64d%I64d",&n,&b);
extgcd(b,9973,x,y); //bx+9973y=gcd(b,9973)
x=((x*n%9973)+9973)%9973;//注意int溢出
printf("%I64d\n",x);
}
return 0;
}