所谓的幂取模就是a ^ n mod m的值。(m 小于a ^n的位数)
我们可以很容易想到对于要计算这个可以采用分治思想,优化算法,也就是计算a ^ n,我们只需要计算 a ^ n/2依次类推,于是有如下代码:
#include <stdio.h>
int pow_mod(int a,int n,int m){
if(n == 0)
return 1 % m;
if(n == 1)
return a % m;
int x = pow_mod(a,n/2,m);
long long ans = (long long) x * x % m;//防止乘法溢出
if(n % 2 == 1)
ans =ans * a % m;
return (int)ans;
}
int main(){
int a, n , m;
while(scanf("%d%d%d",&a,&n,&m) != EOF){
printf("%d\n",pow_mod(a,n,m));
}
return 0;