费马小定理应用

要求(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

费马小定理也是由同余定理演变而来。

分析:已知   n = A % mod;

(A/B)%mod = A*mul(B,mod-2);(mul表示快速幂求B的mod-2 次方)

#include <iostream>
#include <cstdio>
using namespace std;
typedef long long ll;
const ll mod = 9973;

ll mul(ll x,ll y)
{
    ll res = 1;
    while(y)
    {
        if(y&1)
            res = (res*x)%mod;
        x = (x*x)%mod;
        y>>=1;
    }
    return res%mod;
}
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        ll a,b;
        scanf("%lld %lld",&a,&b);
        ll temp = mul(b%mod,mod-2);
        printf("%lld\n",(a*temp)%mod );
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/Nothing_227/article/details/82867729
今日推荐