1. 程式人生 > >hdu1576(擴展gcd求乘法逆元)

hdu1576(擴展gcd求乘法逆元)

mis pla IT cep bsp time 兩個 AI total

A/B

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


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 分析:用擴展歐幾裏得算法求乘法逆元(模逆元)。 技術分享圖片
#include<cstdio>

long long exgcd(long long a,long long b,long long &x,long long &y)
{
    if(b==0)
    {
        x=1;
        y=0;
        return a;
    }
    long long
r=exgcd(b,a%b,x,y); long long t=x; x=y; y=t-a/b*y; return r; } int main() { int T; long long N,B,p=9973; scanf("%d",&T); while(T--) { scanf("%lld%lld",&N,&B); long long x,y; long long r=exgcd(B,p,x,y); printf("%lld\n",N*((x%p+p)%p)%p); }
return 0; }
View Code

hdu1576(擴展gcd求乘法逆元)