题目:POJ-1995 Raising Modulo Numbers
题目大意:说实话,并不知道题目大意,看样例就能过的一道题,就是让求(A1^B1+....An^Bn)MOD M
解题思路:一看数据量不大,直接快速幂过之,第一发tle了,因为用了快乘,去了就a了,看起来不溢出的题还是最好别用快乘,不是一个很快的东西。算是一个快速幂的模板题了吧。
AC代码:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
long long qpow(long long a,long long b,long long M){
if (a==0)return 0;
if (b==0)return 1;
long long ans=1;
long long k=a;
while(b){
if(b&1)ans=ans*k%M;
k=k*k%M;
b>>=1;
}
return ans%M;
}
int main(){
long long a,b,n,m,k,t,i,j;
scanf("%lld",&t);
while (t--){
scanf("%lld%lld",&m,&n);
long long ans=0;
while (n--){
scanf("%lld%lld",&a,&b);
ans=(ans+qpow(a,b,m))%m;
}
printf("%lld\n",ans);
}
}