快速幂算法
- 快速幂就是快速算底数的n次幂,其时间复杂度为 O(log₂N)
- 例如:
求
7
10
求 7^{10}
求710
7 10 = 7 5 + 5 = 7 5 ∗ 7 5 , 而 7 5 = 7 2 ∗ 7 2 ∗ 7 7^{10} = 7^{5+5} = 7^{5}*7^{5},而7^{5}=7^{2}*7^{2}*7 710=75+5=75∗75,而75=72∗72∗7
code
- leetcode 50 Pow(x,n)
- 实现x的n 次幂
class Solution {
public:
double myPow(double x, int n) {
if(n == 0 ) return 1;
double half = myPow(x,n/2);
if(n%2 == 0) return half*half; // even
if(n>0) return half*half*x; // odd
return half*half/x; // <0, 1/x
}
};
class Solution {
long long int Pow(long long int x,int n){
if(n == 0) return 1;
long long int v = Pow(x,n/2);
v %= 1337;
return (n%2 == 0 ? 1 : (x%1337) ) * (v*v)%1337;
}
long long int fastpower(long long int x,int n){
long long int ans = 1;
while(n > 0){
if(n & 1){
ans *= x;
ans %= 1337;
}
x *=x%1337;
n >>= 1;
}
return ans;
}
public:
int superPow(int a, vector<int>& b) {
long long int ans = 1,tmp = a % 1337;
int i = b.size()-1;
while(i>=0){
ans *= fastpower(tmp,b[i]);
tmp = fastpower(tmp,10) % 1337;
ans %= 1337;
i--;
}
return ans;
}
};