问题链接:HDU2035 人见人爱A^B
问题简述:计算A^B的最后三位整数。
问题分析:这问题可以用乘方取模函数来解决。
程序说明:增加一个C++语言的版本。
AC的C++语言程序如下:
#include <iostream> using namespace std; const int MOD = 1000; // 快速模幂计算函数 int powermod(long long a, int n, int m) { long long res = 1; while(n) { if(n & 1) { // n % 2 == 1 res *= a; res %= m; } a *= a; a %= m; n >>= 1; } return res; } int main() { int a, b; while(cin >> a >> b && (a || b)) cout << powermod(a, b, MOD) << endl; return 0; }
AC的C语言程序如下:
/* * 乘方取模 * * 已知给定的正整数a、n和m,计算x的值,a^n = x (mod m)。 * * 二分法用在这里也很有效果。 */ #include <stdio.h> long powermod(long a, long n, long m) { long res = 1L; while(n) { if(n & 1L) { res *= a; res %= m; } a *= a; a %= m; n >>= 1; } return res; } int main(void) { long a, n; for(;;) { scanf("%ld %ld", &a, &n); if(a==0 && n==0) break; printf("%ld ", powermod(a, n, 1000L)); } return 0; }