可以用分治递归和循环两种方式,将大数分成二进制进行运算。
#include<bits/stdc++.h>
using namespace std;
int pow_mod1(
int b,
int p,
int k){
if(!p)
return 1;
int x = pow_mod1(b, p/
2, k);
long long ans = (
long long) x * x % k;
if(p %
2) ans = ans * b % k;
return (
int) ans;
}
int pow_mod2(
int b,
int p,
int k){
long long ans =
1;
while(p){
if(p &
1) ans = ans * b % k;
p = p >>
1;
b = b * b % k;
}
return ans;
}
int main(){
int b, p, k;
cin >> b >> p >> k;
cout << pow_mod1(b, p, k) << endl;
cout << pow_mod2(b, p, k) << endl;
return 0;
}