[HDU1576] A/B(扩展欧几里得)

传送门

n = A % 9973 -> n = A - A / 9973 * 9973

设 x = A / B(题目所述,B|A) -> A = B * x

所以 B * x - A / 9973 * 9973 = n

设 y = A / 9973

则 B * x - 9973 * y = n

B 和 n 已知, gcd(B, 9973) == 1

所以可以求出 B * x + 9973 *(- y) == 1 时的 x 的解

然后 x 再 * n,最后求 (x % 9973 + 9973) % 9973 即为答案

——代码

 1 #include <cstdio>
 2 
 3 inline void exgcd(int a, int b, int &x, int &y)
 4 {
 5     if(!b){x = 1, y = 0; return;}
 6     exgcd(b, a % b, y, x);
 7     y -= a / b * x;
 8 }
 9 
10 int main()
11 {
12     int n, b, x, y, T;
13     scanf("%d", &T);
14     while(T--)
15     {
16         scanf("%d %d", &n, &b);
17         exgcd(b, 9973, x, y);
18         x *= n;
19         printf("%d
", (x % 9973 + 9973) % 9973);
20     }
21     return 0;
22 }
View Code
原文地址:https://www.cnblogs.com/zhenghaotian/p/6836963.html