直接指数运算会爆longlong
倍增快速幂-将指数转换为二进制
然后依据模运算 a*b%p = (a%p)*(b%p)%p 进行计算
#include <stdio.h>
long long powMod(long long a, long long n, long long p) {
long long ans = 1;
for(; n > 0; n >>= 1) { // n >>= 1 二进制右移一位,等价于 n /= 2;
if(n&1) ans = ans*a%p; // n&1 取n二进制的末位,1为奇数,0为偶数
a = a*a%p;
}
return ans;
}
int main()
{
long long Z,mod,m,a,b,sum;
scanf("%lld",&Z);
while (Z--)
{
sum =0 ;
scanf("%lld%lld",&mod,&m);
while(m--)
{
scanf("%lld%lld",&a,&b);
sum+=powMod(a,b,mod);//(a + b)%p = (a%p + b%p)%p
}
sum=sum%mod;
printf("%lld\n",sum);
}
}