1. 快速幂算法原理与实现
快速幂算法(Fast Exponentiation)是一种高效计算大整数幂运算的算法。传统计算a^b需要进行b-1次乘法运算,时间复杂度为O(b),当b很大时(比如10^9),这种方法是不可行的。快速幂通过二进制分解技术,将时间复杂度优化到O(logb)。
1.1 二进制分解思想
快速幂的核心在于将指数b表示为二进制形式,然后利用幂的乘法性质进行分解。例如计算a^13:
13的二进制表示为1101,即:
13 = 8 + 4 + 0 + 1 = 2^3 + 2^2 + 0 + 2^0
因此:
a^13 = a^8 × a^4 × a^0 × a^1
而a^8可以通过连续平方得到:
a^8 = (a^4)^2 = ((a^2)^2)^2
1.2 算法实现
cpp复制long long quick_pow(long long base, long long exp) {
long long res = 1;
while (exp) {
if (exp & 1) {
res *= base;
}
base *= base;
exp >>= 1;
}
return res;
}
算法步骤:
- 初始化结果res=1
- 检查exp的最低位是否为1
- 如果为1,将当前base乘入res
- base平方,exp右移一位
- 重复直到exp为0
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 带模数的快速幂
在实际应用中,经常需要计算a^b mod m。快速幂模数版本基于模运算的分配律:
(a×b) mod m = [(a mod m)×(b mod m)] mod m
2.1 模数快速幂实现
cpp复制long long quick_pow(long long base, long long exp, long long mod) {
long long res = 1;
base %= mod; // 先取模,防止初始base过大
while (exp) {
if (exp & 1) {
res = (res * ba
