A/BTime Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 9104 Accepted Submission(s): 7294 Problem Description 要求(A/B)%9973,但由于A很大,我们只给出n(n=A%9973)(我们给定的A必能被B整除,且gcd(B,9973) = 1)。
Input 数据的第一行是一个T,表示有T组数据。
Output 对应每组数据输出(A/B)%9973。
Sample Input 2 1000 53 87 123456789
Sample Output 7922 6060
Author xhd
Source HDU 2007-1 Programming Contest
Recommend linle
|
对于A/B %C 我们不能直接算,需要转化一下:A/B %C = A * (B模C的逆元)% C;
当时理解错了,以为是 (A*B)模C 的逆元再%C,然后照着这个思路,居然AC 了,求大神解惑!!!
#include<iostream>
typedef long long ll;
using namespace std;
ll exgcd(ll a,ll b,ll &x,ll &y){
ll t,d;
if(b==0){
x=1;
y=0;
return a;
}
d=exgcd(b,a%b,x,y);
t=x;
x=y;
y=t-(a/b)*y;
return d;
}
ll modv(ll a,ll mod){
ll x,y;
exgcd(a,mod,x,y);
return (mod+x%mod)%mod;
}
int main(){
int t;
cin>>t;
ll a,b;
while(t--){
cin>>a>>b;
cout<<modv(modv(a,9973)*b,9973)<<endl;
}
return 0;
}