题目链接:http://poj.org/problem?id=1995
就是求(A1^ B1+A2^ B2+ … +AH^ BH)mod M
快速幂详解:https://blog.csdn.net/weixin_44049850/article/details/85222998
运用了取模的运算法则:
(a*b) % p = (a % p * b % p) % p
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <cmath>
#include <cstring>
#include <string>
#include <vector>
#include <set>
#include <stack>
#include <map>
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
const int maxn=50005;
ll M,H;
ll fast_power(ll x, ll y)
{
ll base=x,ans=1;
while(y)
{
if(y&1)
{
ans=ans%M*base%M%M;
}
base=base%M*base%M%M;
y>>=1;
}
return ans;
}
int main()
{
int Z;
scanf("%d",&Z);
while(Z--)
{
scanf("%lld%lld",&M,&H);
ll sum=0;
while(H--)
{
ll n1,n2;
scanf("%lld%lld",&n1,&n2);
sum=(sum+fast_power(n1,n2))%M;
}
printf("%lld\n",sum);
}
return 0;
}