快速幂取模:
int PowerMod(int a, int b, int c) { int ans = 1; a = a % c; while(b>0) { if(b&1) ans = (ans * a) % c; a = (a * a) % c; b >>= 1; } return ans; }
http://acm.hdu.edu.cn/showproblem.php?pid=1061
求a^b的个位数字,即(a^b)mod 10。
int mod_exp(int a, int b, int c) { int ans = 1; int t = a%c; while(b) { if(b&1) ans = ans*t%c; t = t*t%c; b >>= 1; } return ans; } int main() { int test,n; scanf("%d",&test); while(test--) { scanf("%d",&n); int ans = mod_exp(n,n,10); printf("%d\n",ans); } return 0; }
求a^b的最后三位数,即(a^b)mod 1000.
using namespace std; const int INF = 0x3f3f3f3f; _LL mod_exp(_LL a, _LL b, int c) { _LL ans = 1; _LL t = a%c; while(b) { if(b&1) ans = ans*t%c; t = t*t%c; b >>= 1; } return ans; } int main() { _LL a,b; while(~scanf("%I64d %I64d",&a,&b)) { if(a == 0 && b == 0) break; _LL ans = mod_exp(a,b,1000); printf("%I64d\n",ans); } return 0; }
_LL mod_exp(_LL a, _LL b, _LL c) { _LL res = 1; _LL t = a%c; while(b) { if(b&1) res = res*t%c; t = t*t%c; b >>= 1; } return res; } int main() { int test,t; _LL ans; scanf("%d",&test); while(test--) { _LL a,b,c; ans = 0; scanf("%I64d",&c); scanf("%d",&t); while(t--) { scanf("%I64d %I64d",&a,&b); _LL res = mod_exp(a,b,c); ans = (ans%c + res%c)%c; } printf("%I64d\n",ans); } return 0; }
原文:http://blog.csdn.net/u013081425/article/details/24292371