普通的求幂时间复杂度为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);
- }