普通的求幂时间复杂度为O(n);
但是可以有更好的算法,实际上循环log(2,n),
n^k = n^(k1*2^0 + k2*2^1 + k3*2^3 ....) k1,k2...k(log2,n)取0,1,为k的二进制中每一个bit位
展开便可得。n^(k1*2^0) * n^(k2*2^1) * n^(k3*2^2).......
至此,一个较优的算法出现了
#include <stdio.h>
int power(int n, int k) {
int ans = 1;
while( k ) {
if(k & 1) {
ans *= n;
}
k >>= 1;
n *= n;
}
return ans;
}
int main ( ) {
int n, k;
scanf("%d %d",&n, &k);
printf("%d\n",power(n,k));
exit(0);
}