前言
文章参考自:《算法零基础100讲》第15讲
概念
二分快速幂本质是 分治思想。
对于表达式
可以分解成以下三种情况求解:
示例:
比如计算 n ^ 16, 那计算过程就为:
n ^ 16 -> n ^ 8 -> n ^ 4 -> n ^ 2 -> n;
若要计算 n ^ 37, 计算过程为:
n ^ 37 -> n ^ 18 -> n ^ 9 -> n ^ 4 -> n ^ 2 -> n
LeetCode 50.pow(x, n)
原题链接:pow(x, n)
代码
快速幂,递归方法
static double Pow(double x, long long n)
{
if (n == 1) return x;
double tmp = Pow(x, n / 2);
double ans = 0.0;
if (n % 2 != 0)
{
ans = tmp * tmp * x;
}
else
{
ans = tmp * tmp;
}
return ans;
}
double myPow(double x, int n)
{
double ans = 1.0;
if (n == 0 || x == 1) return ans;
long long N = n;
//当n小于0时,讲问题转化为求 n > 0
if (n < 0)
{
ans = 1.0 / Pow(x, -N);
}
else
{
ans = Pow(x, N);
}
return ans;
}
LeetCode 372.超级次方
原题链接: 超级次方
代码
int my_pow (int base, int n, int mod)
{
int res = 1;
while (n)
{
base %= mod;
if (n & 1)
res *= base;
base *= base;
n >>= 1;
}
return res % mod;
}
int superPow(int a, int* b, int bSize)
{
int res = 1, mod = 1337;
for (int i = bSize - 1; i >= 0; --i)
{
if (b[i])
{
res *= my_pow (a, b[i], mod);
res %= mod;
}
a = my_pow (a, 10, mod);
}
return res;
}
LeetCode 1808.好因子的最大数目
原题链接: 好因子的最大数目
还没写,链接挂着以防找不到。。。