快速幂取模处理a^b过大时不溢出并且复杂度减小一些。
数论内容:
(a+b+c)%m=((a%m+b)%m+c)%m
b为奇数时 a^b mod c=a^(b+1) mod c
b为偶数时 a^b mod c=a^b mod c
#include <iostream>
using namespace std;
typedef long long ll;
ll mod(ll a,ll b,ll m)
{
ll ret=1;
while(b)
{
if(b%2==1) ret=ret*a%m;
a=a*a%m;
b/=2;
}
return ret;
}
int main()
{
ll t,m,n,a,b;
cin >> t;
while(t--)
{
cin >> m >> n;
ll ans =0;
while(n--)
{
cin >> a >> b;
ans=(ans+mod(a,b,m))%m;
}
cout << ans << endl;
}
return 0;
}
在函数中处理一下奇数的情况
本文介绍了快速幂取模算法的实现原理与应用,通过具体的C++代码示例讲解了如何处理大数幂运算时的溢出问题,并提供了一种高效求解a^b mod c的方法。

1075

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



