数论的题目,问的很明显。因为n=A%9973,所以A-A/9973*9973=n,(计算机的除法直接取整)。又因为A=k*B,并且B*x+9973*y=1,题目问的是(A/B)%9973也就是k%9973是多少,现在A-A/9973*9973=n,转化为B*k-9973*y=n,也就是把A/9973看成整体就好了。又有B*x+9973*y=1,这个x和y可以用扩展欧几里德直接求出,k=n*x,关键如果k是负的怎么办?看程序。
#include<iostream>
using namespace std;
int x,y,q;
void extendedgcd(int a,int b)
{
if(b==0)
{
x=1;
y=0;
q=a;
}
else {
extendedgcd(b,a%b);
int temp;
temp=x;
x=y;
y=temp-a/b*y;
}
}
int main()
{
int t,n,b,ans;
cin>>t;
while(t--)
{
cin>>n>>b;
extendedgcd(b,9973);
x=x*n;
ans=(x%9973+9973)%9973;
cout<<ans<<endl;
}
return 0;
}