Hdu 1576 A/B 擴充套件歐幾里得
阿新 • • 發佈:2018-12-14
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
設結果為k,則k=(A/B)%9973;
A/B=9973m+k;
A=B*k+9973*m*B;
因為:A%9973=n
所以:
n=(B*k+9973*m*B)%9973;
n%9973=k*B%9973.
k*B+9973y=n;
然後下面就是擴充套件歐幾里得...
程式碼如下:
#include <cstdio> #include <cstring> #include <algorithm> #include <iostream> using namespace std; typedef long long ll; const long long Mod=9973; int t; ll n,b; void Extend (ll A,ll B, ll& X,ll& Y) { if(B==0) { X=1; Y=0; return; } else { ll ans,temp; Extend(B,A%B,X,Y); temp=X; X=Y; Y=temp-A/B*Y; } } int main() { scanf("%d",&t); while (t--) { scanf("%lld%lld",&n,&b); ll x,y; Extend(b,Mod,x,y); x=x*n; x=(x%Mod+Mod)%Mod; printf("%lld\n",x); } return 0; }