解题思路:(a/b)%m,就要求出b的逆元b1,这样就可以化为(a*b1*b/b)%m=(a*b1)%m=(a%m)*(b1%m)了。
但是求你元也是有限制的,因为逆元的推导过程是建立在ax+by=1的基础上的(详见我以前分析逆元的博客)。所以结合扩展欧几里得可知,x,y要想有整数解,gcd(a,b)必须等于1的因数,但由于1的因数只有1,所以gcd(a,b)必须为1。所以a,b互质。
所以就是求b的逆元呗!
#include
#include
#include
using namespace std;
int extgcd(int a,int b,int &x,int &y)
{
if(b==0)
{
x=1;
y=0;
return a;
}
int r=extgcd(b,a%b,x,y);
int t=x;
x=y;
y=t-a/b*y;
return r;
}
int main()
{
//freopen("t.txt","r",stdin);
int x,y,T;
int a,b;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&a,&b);
extgcd(9973,b,x,y);
y=(y+9973)%9973;
printf("%d\n",((y%9973)*(a%9973)%9973));
}
return 0;
}