暴力的:
一:A被B整除,A=k*B,两边同时%9973
A%9973=(k*B)%9973
n=k%9973*B%9973
B=B%9973
k=1;k++,当k*B==n,输出k
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<set>
using namespace std;
int main()
{
long long T,i,n,b;
cin>>T;
while(T--)
{
scanf("%lld%lld",&n,&b);
b%=9973;
for(i=1;i<9973;i++)
{
if(i*b%9973==n)
{
cout<<i<<endl;
break;
}
}
}
return 0;
}
二:
n=A%9973
也就是说,A-n一定能够被9973整除
A能够被B整除
设A=i*B,把A换成i*B
即(i*B-n)%9973==0
输出i
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<set>
using namespace std;
int main()
{
long long T,i,n,b;
cin>>T;
while(T--)
{
scanf("%lld%lld",&n,&b);
i=1;
while(1)
{
if((b*i-n)%9973==0)
{
cout<<i<<endl;
break;
}
i++;
}
}
return 0;
}
三:
求逆元
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<set>
using namespace std;
long long qkpow(long long a,long long mod)
{
long long ans=1,c=mod-2;
a%=mod;
while(c)
{
if(c&1)
{
ans=(ans*a)%mod;
}
a=(a*a)%mod;
c/=2;
}
return ans;
}
int main()
{
int T,i;
long long N,B,VB,ans;
cin>>T;
while(T--)
{
scanf("%lld%lld",&N,&B);
VB=qkpow(B,9973)%9973;
ans=N*VB%9973;
printf("%lld\n",ans);
}
return 0;
}