方法一:扩展欧几里得
设A/B = x, A = Bx
n = A % 9973 = A - (A/9973) * 9973
联立得 Bx - 9973y = n
又因为 gcd(B, 9973) = 1
得 Bx0 + 9973y0 = 1
x = x0 * n
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int gcd(int a,int b,int &x,int &y)
{
if(b==0)
{
x=1;
y=0;
return a;
}
int q=gcd(b,a%b,y,x);
y-=a/b*x;
return q;
}
int main()
{
int n,b,x,y,t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&b);
gcd(b,9973,x,y);
x=x*n;
printf("%d\n",(x%9973+9973)%9973);
}
return 0;
}
方法二: 费马小定理 + 快速幂
1 (mod p)
b * 1 (mod p)
#include<iostream>
#include<cstdio>
#include<cstring>
typedef long long ll;
const int maxn=1e5+10;
#define mod 9973
using namespace std;
ll powmod(ll a,ll b)
{
ll ans=1;
while(b)
{
if(b&1)
ans=(ans*a)%mod;
a=(a*a)%mod;
b>>=1;
}
return ans%mod;
}
int t;
int n,b;
int main()
{
cin>>t;
while(t--)
{
scanf("%d%d",&n,&b);
b=b%mod;
printf("%lld\n",(n*powmod(b,mod-2)+mod)%mod);
}
return 0;
}