题目链接:http://poj.org/problem?id=1995
参考:http://www.cnblogs.com/PegasusWang/archive/2013/03/13/2958150.html
解题报告:
#include <iostream> #include <stdio.h> #include <algorithm> using namespace std; ///a^b%c=? int PowerMod(int a,int b,int c) { int ans=1; a=a%c; while(b>0) { if(b%2==1) ans=(ans*a)%c; b=b/2; a=(a*a)%c; } return ans; } int mod_exp(int a,int b,int c) { int ans=1; a=a%c; while(b) { if(b&1) ans=ans*a%c; a=a*a%c; b=b>>1; } return ans; } int main() { int T; cin >> T; while (T--) { int ans=0; int mod; int n; scanf("%d%d",&mod,&n); for(int i=0;i<n;i++) { //ans=0; int a,b; scanf("%d%d",&a,&b); ans=(ans%mod+mod_exp(a,b,mod))%mod; } printf("%d ",ans); } return 0; }
快速幂取模:
1、
int ans=1; for(int i=1;i<=b;i++) ans=ans*a; ans=ans%c;
2、
int ans=1; a=a%c; for(int i=1;i<=b;i++) ans=ans*a; ans=ans%c;
3、
int ans=1; a=a%c; for(int i=1;i<=b;i++) ans=(ans*a)%c; ans=ans%c;
4、
int ans=1; a=a%c; if(b%2==1) ans=(ans*a)%c; int k=(a*a)%c; for(int i=1;i<=b/2;i++) ans=(ans*k)%c; ans=ans%c;
5、
int PowerMod(int a,int b,int c) { int ans=1; a=a%c; while(b>0) { if(b%2==1) ans=(ans*a)%c; b=b/2; a=(a*a)%c; } return ans; }
6、
int mod_exp(int a,int b,int c) { int ans=1; a=a%c; while(b) { if(b&1) ans=ans*a%c; a=a*a%c; b=b>>1; } return ans; }