利用二分法
Montgomery模板
//求解a^b mod m
int Montgomery(int a,int b,int m){
int r=a%m;
int t=1;
if(b==0)
return 1;
while(b>1){
if((b&1)!=0){
t=(t*r)%m;
}
r=r*r%m;
b>>=1;
}
return (r*t)%m;
}
//POJ 1995
#include<cstdio>
using namespace std;
int Montgomery(int a,int b,int m){
int r=a%m;
int t=1;
if(b==0)
return 1;
while(b>1){
if((b&1)!=0){
t=(t*r)%m;
}
r=r*r%m;
b>>=1;
}
return (r*t)%m;
}
int main(){
int Z,M,H;
scanf("%d",&Z);
while(Z--){
scanf("%d",&M);
scanf("%d",&H);
int sum=0;
for(int i=0;i<H;i++){
int a,b;
scanf("%d%d",&a,&b);
sum+=Montgomery(a,b,M);
sum%=M;
}
printf("%d\n",sum);
}
return 0;
}