A/B HDU-1576(简单的数论题)

# 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

思路:
  由题可列出:
    $\left\{ \begin{array}{c} A=K*9973+n \\
A/B=C \\
C=P*9733+x\end{array}\right.$
  
即 $x$ 为我们所要的答案,联立方程组可得
  $K*9973=B*P*9973+B*x-n$;
即   $(B*X-n)$%$9973==0$;
由于A的数据太大所以需要进行模运算,否则会超出 $int$ 的范围
模运算:
    $\left\{ \begin{array}{c} (a+b)\% c==(a\% c+b\% c)\% c \\ \\
(a-b)\%c==(a\%c-b\%c)\%c;
\\\\
(a*b)\%c==(a\%c*b\%c)\%c;\end{array}\right.$

具体运行看代码ヾ(≧O≦)〃嗷~:

#define N 9973
#include<iostream>
using namespace std;
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n,b;
        cin>>n>>b;
        int i;
        for(i=0;i<N;i++)
        {
            if((((b%N)*i)%N-n)%N==0)
                break;
        }
        cout<<i<<endl;
    }
    return 0;
}

==**实践是检验真理的唯一标准**==

猜你喜欢

转载自www.cnblogs.com/dwj-2019/p/11344364.html