A/B
Problem Description
要求(A/B)%9973,但由于A很大,我们只给出n(n=A%9973)(我们给定的A必能被B整除,且gcd(B,9973) = 1)。
Input
数据的第一行是一个T,表示有T组数据。
每组数据有两个数n(0 <= n < 9973)和B(1 <= B <= 10^9)。
每组数据有两个数n(0 <= n < 9973)和B(1 <= B <= 10^9)。
Output
对应每组数据输出(A/B)%9973。
Sample Input
2 1000 53 87 123456789
Sample Output
7922 6060
Author
xhd
Source
Recommend
linle
分析:
从题目中可以得到
n=A%9973
gcd(B,9973)=1
A%B==0
所以可以得到
n=A-A/9973*9973
A=Bx
n=Bx-y*9973
所以可以用扩展欧几里德求解x
x=A/B再取%9973就可以了
AC代码:
#include<stdio.h>
#include<string.h>
long long kzgcd(long long a,long long b,long long &x,long long &y)
{
if(b==0)
{
x=1,y=0;
return a;
}
long long ans=kzgcd(b,a%b,x,y);
long long t=x;
x=y;
y=t-(a/b)*y;
return ans;
}
long long solve(long long a,long long b,long long c)
{
long long x,y;
kzgcd(a,b,x,y);
long long ans=(x*c)%b;
if(ans<=0)
ans+=b;
return ans;
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
long long n,B;
scanf("%lld%lld",&n,&B);
printf("%lld\n",solve(B,9973,n));
}
}