hdu 1576 A/B
思路:a/b=x; a=b*x; b*x-9973*y=n; 用扩展欧几里得;
对于等式ax+by=c,abc皆为整数且c是gcd(a, b)的倍数,且(x1, y1)是方程ax+by=gcd(a, b)一组整数解,则(x1*(c/gcd(a, b)), y1*(c/gcd(a, b)))是方程ax+by=c的一组解。
1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #define LL __int64 5 using namespace std; 6 7 int t; 8 int n,b; 9 10 void extend(LL a,LL b,LL &d,LL &x,LL &y) 11 { 12 if(!b) 13 { 14 x=1; 15 y=0; 16 d=a; 17 } 18 else 19 { 20 extend(b,a%b,d,y,x); 21 y-=x*(a/b); 22 } 23 } 24 25 int main() 26 { 27 scanf("%d",&t); 28 while(t--) 29 { 30 scanf("%d%d",&n,&b); 31 LL d,x,y; 32 extend((LL)b,9973,d,x,y); 33 x*=n; 34 x=(x%9973+9973)%9973; 35 printf("%I64d\n",x); 36 } 37 return 0; 38 }