A/B 乘法逆元

A/B

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 6592    Accepted Submission(s): 5223


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)。
 

Output
對應每組數據輸出(A/B)%9973。
 

Sample Input
2 1000 53 87 123456789
 

Sample Output
7922 6060
 

Author
xhd
 

Source
 

Recommend
linle

這題要求A/B%9973  給出的是n=A%9973,和B  這題可用乘法逆元
求B與9973的逆元在乘以n

#include<iostream>
#include<math.h>
#include<algorithm>
using namespace std;
typedef long long  ll;
ll e_gcd(ll a,ll b,ll &x,ll &y)
{
if(b==0)
{
x=1;y=0;
return a;
}
ll ans=e_gcd(b,a%b,x,y);
ll t=x;
x=y;
y=t-a/b*y;
return ans;
}
ll cal(ll a,ll m)
{
    ll x,y;
    ll gc=e_gcd(a,m,x,y);
    if(1%gc!=0) return -1;
    x*=1/gc;
    m=abs(m);
    ll ans=x%m;
    if(ans<=0) ans+=m;
    return ans;


}
ll  p;
ll a,b;
ll t;
int main()
{
    cin>>t;
while(t--)
{
   cin>>a>>b;
p=9973;
ll ans=cal(b,p);
cout<<a*ans%p<<endl;
}
return 0;
}
人一我百!人十我萬!永不放棄~~~懷着自信的心,去追逐夢想。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章