一.题目链接:
HDU-1576
二.题目大意:
要求 (A / B) % 9973,但由于 A 很大,我们只给出 n (n = A % 9973)
(我们给定的A必能被B整除,且gcd(B,9973) = 1).
三.分析:
费马小定理:假如 P 是质数,且 gcd(B,P) = 1,则 % P = 1.
由此可推出:如果 B 为整数,且 P 为质数,那么 % P = 1.
再乘法逆元可得:(A / B)% P = A * % P.
其实没啥好分析的,我就是想存个板子.
四.代码实现:
#include <set>
#include <map>
#include <ctime>
#include <queue>
#include <cmath>
#include <stack>
#include <vector>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#define eps 1e-6
#define PI acos(-1.0)
#define ll long long int
using namespace std;
ll power(ll a, ll b, ll c)
{
ll sum = 1;
while(b)
{
if(b & 1)
sum = (sum % c * a % c) % c;
a = (a % c * a % c) % c;
b >>= 1;
}
return sum % c;
}
int main()
{
int T;
ll n, b;
ll p = 9973;
scanf("%d", &T);
while(T--)
{
scanf("%lld %lld", &n, &b);
printf("%lld\n", n * power(b, p - 2, p) % p);
}
return 0;
}

本文详细解析了如何利用费马小定理解决大数除法问题,尤其是在A远大于B且A%B=0的情况下的取模运算。通过分析,我们提供了具体的代码实现,展示了如何计算(A/B)%P,其中P为质数,且gcd(B,P)=1。
1万+

被折叠的 条评论
为什么被折叠?



