快速幂取模处理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;
}
在函数中处理一下奇数的情况