题目大意:
给出
组数,每组包括一对
,以及
对
,
对于每组数请回答,
的结果
分析:
将
转化成二进制表示,可以得到
那么显然
就可以转化成
那么就可以在
的时间内处理出
代码:
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
typedef long long ll;
int mul(int x, int y, int MOD)
{
int num = 1 % MOD;
for (; y; y >>= 1)
{
if (y & 1) num = (ll)num * x % MOD;
x = (ll)x * x % MOD;
}
return num;
}
int main()
{
int T, n, MOD;
scanf("%d", &T);
while (T--)
{
scanf("%d", &MOD);
scanf("%d", &n);
int a, b, sum = 0;
for (int i = 1; i <= n; i++)
{
scanf("%d %d", &a, &b);
sum = (sum + mul(a, b, MOD)) % MOD;
}
printf("%d\n", sum);
}
}