题目:5579. 增加模数
题目描述
给定 H 对非负整数数对 (Ai,Bi) 和一个正整数 M。
请你计算并输出 (A1B1+A2B2+...+AHBH) mod M。
输入格式
第一行包含整数 T,表示共有 T 组测试数据。
每组数据第一行包含整数 M。
第二行包含整数 H。
接下来 H 行,每行包含两个整数 Ai,Bi。
输出格式
每组数据输出一行结果。
数据范围
1≤T≤100,
1≤M≤45000,
1≤H≤45000,
0≤Ai,Bi≤107,
Ai 和 Bi 不同时为 0。
时空限制
3s / 128MB
输入样例
3
16
4
2 3
3 4
4 5
5 6
36123
1
2374859 3029382
17
1
3 18132
输出样例
2
13195
13
代码 (TLE)
cpp
#include<bits/stdc++.h>
using namespace std;
int T, p, H, a, b;
int res, sum;
int main(){
scanf("%d", &T);
while(T --){
scanf("%d %d", &p, &H);
res = 0;
while(H --){
scanf("%d %d", &a, &b);
sum = 1 % p;
a %= p;
while(b){
if(b & 1){
sum = sum * a % p;
}
b >>= 1;
a = a * a % p;
}
res = (res + sum) % p;
}
printf("%d\n", res);
}
return 0;
}