题意:
(A1B1+A2B2+ ... +AHBH)mod M.
很显然这是快速幂取模,模板题,没什么好说的,简单说一下快速幂的原理(来自百度百科)
把b转换成
二进制数。
该二进制数第i位的权为

例如

11的二进制是1011
11 = 2³×1 + 2²×0 + 2¹×1 + 2º×1
因此,我们将a¹¹转化为算

代码:
#include <cstdio>
#define LL long long
using namespace std;
LL quickmod(LL a, LL b, LL m)
{
long long ans = 1;
while(b)
{
if(b&1) //看b当前2进制位是否为1
{
ans = (ans * a) % m;
b--;
}
b = b >> 1;
a = (a * a) % m;
}
return ans;
}
int main()
{
int z;
scanf("%d", &z);
while(z--)
{
LL m,h;
scanf("%I64d %I64d", &m, &h);
LL ans = 0;
while(h--)
{
LL a,b;
scanf("%I64d %I64d", &a, &b);
ans = (ans + quickmod(a,b,m)) % m;
}
printf("%I64d\n", ans);
}
return 0;
}