C++闪电侠:快速幂算法终极指南

目录

 快速幂核心思想

 快速幂模板代码

 快速幂取模模板(大数必备)

 实战演练(LeetCode真题)


 快速幂核心思想

二进制分解 + 分治思想

a^13 = a^(8+4+1) = a^8 * a^4 * a^1  
通过不断平方分解指数:  
a → a² → a⁴ → a⁸ → ...  

动态演示

指数b=13的二进制:1101  
计算路径:  
a^1 → (a^1)² → a^2 → (a^2)² → a^4 → (a^4)² → a^8  
最终结果 = a^8 * a^4 * a^1  

 快速幂模板代码

ll fast_pow(ll a, ll b) {  
    ll res = 1;  
    while(b > 0) {  
        if(b & 1) res *= a;  // 当前二进制位为1时累乘  
        a *= a;              // 平方倍增基数  
        b >>= 1;             // 右移处理下一位  
    }  
    return res;  
}  

 快速幂取模模板(大数必备)

解决溢出问题(a^b) % mod

ll mod_pow(ll a, ll b, ll mod) {  
    ll res = 1;  
    a %= mod;  // 关键!先取模防溢出  
    while(b > 0) {  
        if(b & 1) res = (res * a) % mod;  
        a = (a * a) % mod;  
        b >>= 1;  
    }  
    return res;  
}  

 实战演练(LeetCode真题)

50. Pow(x, n):直接套用模板
372. 超级次方:快速幂 + 逐位处理
1137. 第N个泰波那契数:矩阵快速幂


掌握这个模板,LeetCode所有幂运算题10行代码搞定!

你可能感兴趣的:(算法,算法,深度优先,c++)