题意:
已知 gcd(B, mod)=1, A%B==0,A/B *B=n(mod mod);
给出B,n;求 A/B= ans (mod mod)中的ans
题解:
求解模线性方程
先求A/B,令A/B=x
则有B*x=n(mod mod),可想到扩展欧几里德
求出x,因为这里的x是B*x=1(mod 9973)的解,x之后还要乘n
代码如下:
#include<iostream>
#include<cstdio>
using namespace std;
const int mod=9973;
__int64 a,b,c,d,x,y;
__int64 exgcd(__int64 a,__int64 b)
{
if(b==0)
{
x=1;y=0;
return a;
}
d=exgcd(b,a%b);
__int64 xx=y,yy=x-a/b*y;
x=xx;y=yy;
return d;
}
int main()
{
int cas;
scanf("%d",&cas);
while(cas--)
{
__int64 B,n;
scanf("%I64d%I64d",&n,&B);
d=exgcd(B,mod);
x*=n;
printf("%d\n",(x%mod+mod)%mod);
}
return 0;
}