1. 程式人生 > >hdu 1576 A/B(擴充套件歐幾里得)

hdu 1576 A/B(擴充套件歐幾里得)

思路:設(A/B)%9973 = K, 則A/B = k + 9973x  (x未知), 因此A = kB + 9973xB,

又A%9973 = n, 所以kB%9973 = n,  故kB = n + 9973y (y未知)

故(k/n)B +(-y/n)*9973 = gcd(B,9973) = 1

擴充套件歐幾里得 求出k/n,  再乘以個n,記得取模,就是answer了

程式碼:

#include <stdio.h>
#include <stdlib.h>

#define m 9973

void Extend_gcd(int a,int b,int &x,int &y)
{
    if(b==0)
    {
        x=1,y=0;
        return ;
    }
    Extend_gcd(b,a%b,x,y);
    int r=x;
    x=y;
    y=r-(a/b)*y;
}

int main()
{
    int n,b,t,x,y;
    scanf("%d",&t);

    while(t--)
    {
        scanf("%d%d",&n,&b);
        Extend_gcd(b,m,x,y);
        x=(x%m+m)%m;
        printf("%d\n",(x*n)%m);
    }
    return 0;
}