一般大家写都是
cpp
int ans = 1;
for (int i = 1; i <= a; i ++)
ans *= x;
时间复杂度
但是这对于我们还不够,我们要
首先我们得知道一个数学知识
那么求 就有以下递归式
a 能 被2整除
a 不能 被2整除 (这里a/2是整除)
所以每次都调用 不就是么
最后补充一个东西
(i + j = a)
代码:
cpp
#include <iostream>
using namespace std;
typedef long long LL;
LL a, b, m;
//m是取模的数
LL q_pow(LL a, LL b, LL m) {
if(b == 0)
return 1;
LL tmp = q_pow(a, b >> 1, m) % m;
return (b & 1 ? a : 1) * tmp % m * tmp % m;
//b & 1 和 b % 2 == 1 是等价的
}
int main() {
cin >> a >> b >> m;
cout << q_pow(a, b, m);
return 0;
}